基于C#中XmlReader读取Xml的深入分析
2023-06-13 09:14:54 时间
XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存,而在有些场景下我们必须考虑尽可能节省内存.这时候就该XmlReader和XmlWriter出场了。
XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束,Read()方法返回false。
如下读取Xml内容实例代码和注释说明
复制代码代码如下:
XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束,Read()方法返回false。
如下读取Xml内容实例代码和注释说明
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Xml;
usingSystem.IO;
namespaceUseXmlReader
{
classProgram
{
staticvoidMain(string[]args)
{
//声明StringReader传入Xml文本,作为XmlReader.Create的参数
using(StringReaderstrRdr=newStringReader(@"<?xmlversion=""1.0""encoding=""utf-8""?>
<root>
<catcolor=""white"">I"maCat</cat>
<dogcolor=""yellow""/>
</root>"))
{
//通过XmlReader.Create静态方法创建XmlReader实例
using(XmlReaderrdr=XmlReader.Create(strRdr))
{
//循环Read方法直到文档结束
while(rdr.Read())
{
Console.WriteLine("rdr.NodeType="+rdr.NodeType);
//如果是开始节点
if(rdr.NodeType==XmlNodeType.Element){
//通过rdr.Name得到节点名
stringelementName=rdr.Name;
Console.WriteLine(elementName+"elementstart");
if(elementName=="root"){
}
//读取到cat元素这时rdr.Read()读取到的内容为<catcolor="white">
elseif(elementName=="cat")
{
//可以通过中括号获得属性值
stringcolorVal=rdr["color"];
Console.WriteLine("\tcat"scoloris"+colorVal);
//读取到节点内文本内容
if(rdr.Read()){
//通过rdr.Value获得文本内容
Console.WriteLine("\tcatsaid:"+rdr.Value);
}
}
}
elseif(rdr.NodeType==XmlNodeType.EndElement)
{
//在节点结束时也可以通过rdr.Name获得节点名字
stringelementName=rdr.Name;
Console.WriteLine(elementName+"elementend");
}
}
}
}
Console.Read();
}
}
}
如果觉得代码不明白,下面是一张读取顺序图,标明了读取顺序号和每次读取的内容,如下图所示:
从图中可以看到XmlReader在读取这段Xml时:
第1次Read()读取的是Xml文档声明部分
第2次Read()读取的是声明后的空白
第3次Read()读取的是根节点root的开始标签
第4次Read()读取的是根节点开始后的空白
第5次Read()读取的是cat节点的开始部分,从左尖括号到右尖括号包括该节点的属性
第6次读取的是cat节点的内容
第7次读取的是cat节点的结束标签
第8次读取的是cat节点结束标签后的空白
第9次读取的是dog节点的开始部分,注意是从左尖括号开始到结束斜杠之前
第10次读取的是dog标签的结束/>
第11次读取的是dog标签结束后的空白
第12次读取的是root的结束标签
相关文章
- java解析xml element_java解析XML Node与Element的区别(推荐)「建议收藏」
- c#设计登录界面并添加数据库_windows窗体连接数据库
- c#异步编程-Task(二)
- 1.5万字长文:从 C# 入门 Kafka(消费者)
- C#/.NET/.NET Core Dapper 批量删除、新增、修改说明
- MySQL中优化XML查询功能(xml查询mysql)
- 分享一个c#写的开源分布式消息队列equeue
- Linux下编辑XML文件的快捷方法(linux 编辑xml)
- MySQL 如何导入 XML 文件(mysql导入xml文件)
- 使用MySQL和XML注释提升数据库设计效率(mysql xml 注释)
- 使用MySQL替换XML数据一种高效的方法(mysql xml替换)
- 使用MySQL解析XML大于号元素(mysql xml大于号)
- C#版ftp方法实现类的代码
- xml封装与解析(javascript和C#中)
- 一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
- c#中返回文章发表的时间差的示例
- c#中xml文档注释编译dll引用到其它项目示例
- C#中Serializable序列化实例详解
- C#递归读取XML菜单数据的方法
- C#定义并实现单链表实例解析
- C#实现将PPT转换成HTML的方法