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

时间:2021-11-04 10:03:04
有文件结构如下:
<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#如何对这样的文件进行读写操作?

16 个解决方案

#1


这样也可以 读了。

#2


引用 1 楼 duanzi_peng 的回复:
这样也可以 读了。

使用linq  to  xml  或者直接读取成字符串

#3


这种直接读字符串然后正则吧

#4


该回复于2015-05-30 12:52:03被管理员删除

#5


引用 3 楼 starfd 的回复:
这种直接读字符串然后正则吧
没有更好的办法了吗?

#6


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);
            }
        }

#7


引用 6 楼 starfd 的回复:

非常感谢!那怎么写入呢?要求不能包含节点。

#8


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));
        }

#9


该回复于2015-05-31 09:04:48被管理员删除

#10


缺少什么补下就可以了. 处理完成后,再把补的去掉.

#11


非常感谢starfd!
原谅我的无知,怎么按照每次一条记录的方式读取?您提供的方式是每次一个字段,处理起来似乎比较麻烦。
另外,能否使用XmlTextReader读取呢?因为我的数据文件比较大,采取字符串的方式效率会低一些。

#12


csdn学院的课吗?便宜

#13


哪位大侠能否明确告知,这种格式能否使用XmlTextReader读取呢?

#14


这种格式能否使用XmlTextReader读取呢?
答案是否定的!
因为你缺少根节点,所以根本不是 XML 文档
即便是配上根节点,XmlTextReader 也不会将 title、author、price 成组处理,因为还缺少了他们的父级节点

但是你可以这样处理:
每次从文件中读取一行
对读的的数据做 XElement.Parse("<root>" + txt + "</root>")
这样就得到了含有 title、author、price 三个成员的 XElement

这个过程和 XmlTextReader 的实际工作过程是一致的

#15


既然用XML又不按照规则,楼主这种设计确实是自找麻烦, XML是按照文本形式存储的数据,如果太大就不太适合了,何况还是这种畸形格式.

#16


这是东软开发某款软件的数据交换文件结构,不是我想这么设计,东软可是一间大公司,可不要说你没听说过吆?

#1


这样也可以 读了。

#2


引用 1 楼 duanzi_peng 的回复:
这样也可以 读了。

使用linq  to  xml  或者直接读取成字符串

#3


这种直接读字符串然后正则吧

#4


该回复于2015-05-30 12:52:03被管理员删除

#5


引用 3 楼 starfd 的回复:
这种直接读字符串然后正则吧
没有更好的办法了吗?

#6


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);
            }
        }

#7


引用 6 楼 starfd 的回复:

非常感谢!那怎么写入呢?要求不能包含节点。

#8


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));
        }

#9


该回复于2015-05-31 09:04:48被管理员删除

#10


缺少什么补下就可以了. 处理完成后,再把补的去掉.

#11


非常感谢starfd!
原谅我的无知,怎么按照每次一条记录的方式读取?您提供的方式是每次一个字段,处理起来似乎比较麻烦。
另外,能否使用XmlTextReader读取呢?因为我的数据文件比较大,采取字符串的方式效率会低一些。

#12


csdn学院的课吗?便宜

#13


哪位大侠能否明确告知,这种格式能否使用XmlTextReader读取呢?

#14


这种格式能否使用XmlTextReader读取呢?
答案是否定的!
因为你缺少根节点,所以根本不是 XML 文档
即便是配上根节点,XmlTextReader 也不会将 title、author、price 成组处理,因为还缺少了他们的父级节点

但是你可以这样处理:
每次从文件中读取一行
对读的的数据做 XElement.Parse("<root>" + txt + "</root>")
这样就得到了含有 title、author、price 三个成员的 XElement

这个过程和 XmlTextReader 的实际工作过程是一致的

#15


既然用XML又不按照规则,楼主这种设计确实是自找麻烦, XML是按照文本形式存储的数据,如果太大就不太适合了,何况还是这种畸形格式.

#16


这是东软开发某款软件的数据交换文件结构,不是我想这么设计,东软可是一间大公司,可不要说你没听说过吆?