C#如何读写类XML文件(无节点)?

Higher 2015-05-30 08:10:51
有文件结构如下:
<title>路由型与交换型互联网基础</title><author>程庆梅</author><price>27.00</price>
<title>计算机硬件技术基础</title><author>李继灿</author><price>25.00</price>
<title>软件质量保证与管理</title><author>朱少民</author><price>39.00</price>
<title>算法设计与分析</title><author>王红梅</author><price>23.00</price>

请教各位老师,C#如何对这样的文件进行读写操作?
...全文
476 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2015-06-03
  • 打赏
  • 举报
回复
既然用XML又不按照规则,楼主这种设计确实是自找麻烦, XML是按照文本形式存储的数据,如果太大就不太适合了,何况还是这种畸形格式.
xuzuning 2015-06-03
  • 打赏
  • 举报
回复
这种格式能否使用XmlTextReader读取呢? 答案是否定的! 因为你缺少根节点,所以根本不是 XML 文档 即便是配上根节点,XmlTextReader 也不会将 title、author、price 成组处理,因为还缺少了他们的父级节点 但是你可以这样处理: 每次从文件中读取一行 对读的的数据做 XElement.Parse("<root>" + txt + "</root>") 这样就得到了含有 title、author、price 三个成员的 XElement 这个过程和 XmlTextReader 的实际工作过程是一致的
Higher 2015-06-03
  • 打赏
  • 举报
回复
这是东软开发某款软件的数据交换文件结构,不是我想这么设计,东软可是一间大公司,可不要说你没听说过吆?
Higher 2015-06-03
  • 打赏
  • 举报
回复
哪位大侠能否明确告知,这种格式能否使用XmlTextReader读取呢?
CSivory 2015-06-01
  • 打赏
  • 举报
回复
csdn学院的课吗?便宜
s8848 2015-05-31
  • 打赏
  • 举报
回复
缺少什么补下就可以了. 处理完成后,再把补的去掉.
Higher 2015-05-31
  • 打赏
  • 举报
回复
非常感谢starfd! 原谅我的无知,怎么按照每次一条记录的方式读取?您提供的方式是每次一个字段,处理起来似乎比较麻烦。 另外,能否使用XmlTextReader读取呢?因为我的数据文件比较大,采取字符串的方式效率会低一些。
  • 打赏
  • 举报
回复
这种直接读字符串然后正则吧
  • 打赏
  • 举报
回复
static void LoadXml()
        {
            string txt = @"<title>路由型与交换型互联网基础</title><author>程庆梅</author><price>27.00</price>
<title>计算机硬件技术基础</title><author>李继灿</author><price>25.00</price>
<title>软件质量保证与管理</title><author>朱少民</author><price>39.00</price>
<title>算法设计与分析</title><author>王红梅</author><price>23.00</price>";
            string xml = "<root>" + txt + "</root>";
            XElement root = XElement.Parse(xml);
            foreach (var ele in root.Elements())
            {//读取
                Console.WriteLine(ele.Value);
            }
            Console.WriteLine("#######################");
            root.Add(new XElement("title", "测试新增"));//写
            Console.WriteLine(Regex.Replace(root.ToString(), @"[\n\r]*</?root>[\n\r]*", string.Empty));
        }
Higher 2015-05-30
  • 打赏
  • 举报
回复
引用 6 楼 starfd 的回复:
非常感谢!那怎么写入呢?要求不能包含节点。
exception92 2015-05-30
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
这样也可以 读了。
使用linq to xml 或者直接读取成字符串
exception92 2015-05-30
  • 打赏
  • 举报
回复
这样也可以 读了。
  • 打赏
  • 举报
回复
static void LoadXml()
        {
            string txt = @"<title>路由型与交换型互联网基础</title><author>程庆梅</author><price>27.00</price>
<title>计算机硬件技术基础</title><author>李继灿</author><price>25.00</price>
<title>软件质量保证与管理</title><author>朱少民</author><price>39.00</price>
<title>算法设计与分析</title><author>王红梅</author><price>23.00</price>";
            XElement root = XElement.Parse("<root>" + txt + "</root>");
            foreach(var ele in root.Elements())
            {
                Console.WriteLine(ele.Value);
            }
        }
Higher 2015-05-30
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
这种直接读字符串然后正则吧
没有更好的办法了吗?

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧