XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存和IO(可能是磁盘IO或者网络IO);而在有些场景下我们必须考虑尽可能节省内存和IO的开销,这时候就该

XmlReader和XMLWriter出场了

XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束,Read()方法返回FALSE

如下读取Xml内容实例代码和注释说明

using System;
using System.Collection.Generic;
using System.Text;
using System.Xml;
using System.IO;
namespace UseXmlReader
{class Program{static void Main(string[] args){//声明StringReader传入Xml文本,作为XMLReader.Create的参数using(StringReader strRdr=new StringReader(@"<?xml version=""1.0""  encoding=""utf-8""?><root><cat color=""white"">I'm a Cat</cat><dog color=""yellow""/>
</root>")){//通过XMLReader.Create静态方法创建XMLReader实例using (XmlReader rdr=XmlReader.Create(strRdr)){//循环Read方法直到文档结束
                  white(rdr.Read()){Console.WriteLine("rdr.NodeType="+rdr.NodeType);//如果是开始节点if(rdr.NodeType==XmlNodeType.Element){//通过rdr.Name得到节点名string elementName=rdr.Name;Console.WriteLine(elementName+"element start");if(elementName=="root"){}//读取到cat元素 这时rdr.Read()读取到的内容为<cat color="white">else if(elementName="cat"){//可以通过中括号获得属性值string colorVal=rdr["color"];Console.WriteLine("\tcat's color is" +colorVal);//读取到节点内文本内容if(rdr.Read()){//通过rdr.Value获得文本内容Console.WriteLine("\t cat said:" +rdr.Value);
}
}
}else if(rdr.NodeType==XmlNodeType.EndElement){//在节点结束时也可以通过rdr.Name获得节点名字string elementName=rdr.Name;Console.WriteLine(elementName  +"element end");
}
}
}
}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的结束标签

感谢@Kingthy对文中消耗IO说法提出问题,XmlReader和XmlDocument消耗的IO是一样的;不同的是XmlReader可以读取一点,显示一点,而XmlDocument必须完全读入之后才可以开始处理。

转载于:https://www.cnblogs.com/zzp0320/p/8287297.html

使用XmlReader读Xml相关推荐

  1. php xmlreader 读xml,PHP中使用xmlreader读取xml数据示例

    这篇文章主要介绍了PHP中使用xmlreader读取xml数据示例,本文示例相对简单,只包含了一个读取功能,需要的朋友可以参考下 有一个XML文件,,内容如下: 复制代码 代码如下: Simpsons ...

  2. 02_Android写xml文件和读xml文件

     新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" en ...

  3. java读XML到实体bean中

    需求: java读XML文档到一个实体bean中 给定一个XML文档,将所有的节点,封装到一个实体中,然后,传XML文件名到程序,将该文件的内容读到实体bean中,返回实体. xml文档的内容 < ...

  4. flash读xml实例教程

    flash读取xml是flash编程必学的一课,在以后的flash编程生涯中会经常遇到的. 其实flash读xml很简单的. 下面用as2简易描述下: 一.建立XML对象: var myXML = n ...

  5. WinRT知识积累1之读xml数据

    前述:这个知识是在Windows8.1或WP8.1中运用Linq to xml获取一个xml文件里的数据.(网上也很多类似的知识,可以借鉴参考) 平台:windows8.1 metro 或者WP8.1 ...

  6. Qt: QXMLStreamReader,读XML文件实例

    主要接口: 1.TokenType QXmlStreamReader::readNext() 功能:读取下一个标记,并返回其类型. 主要的类型有: enum QXmlStreamReader::Tok ...

  7. Android getDimensionPixelSize, 代码中设置字体大小,读xml配置。

    //给一个id为name的TextView设置字体大小  TextView mName = (TextView)findViewById(R.id.name);  mName.setTextSize( ...

  8. TinyXML-2 读 XML 文件

    要读的XML文件 示例代码 #include <iostream> #include "tinyxml2.h"using namespace std; using na ...

  9. 使用tinyxml读xml文件信息到结构体

    下载TinyXML的网址:http://www.grinninglizard.com/tinyxml/ 使用TinyXML只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:tinyxm ...

最新文章

  1. 【Qt】错误GL/gl.h: No such file or directory的解决方法(以及cannot find -lGL解决方法)
  2. 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析
  3. 【Python】字符转换为 ASCII 码
  4. python tkinter 循环显示文本_Python简易音乐播放器
  5. Fast CGI 工作原理
  6. 08.self关键字
  7. java 中 if与while的区别
  8. mysql常用操作记录
  9. TreeView 之间节点拖动 /移动
  10. Mac出现启动问题怎么办
  11. ZOJ 3432 Find the Lost Sock (水题)
  12. DSP指纹识别系统硬件设计
  13. Python爬虫入门教程 89-100 定个小目标,先用Python爬个一亿B站用户
  14. 客户关系管理 数据库设计案例
  15. Simple Contrastive Representation Adversarial Learning for NLP Tasks
  16. 双十一|又快又稳!闲鱼实时事件规则计算驱动平台
  17. Java 常用工具类
  18. 2021京东校招实习生面试 一面
  19. 【Java】高并发-JUC:JUC中的Condition对象
  20. 人人网相册漏洞:非好友可查看隐私相册

热门文章

  1. c语言怎么编程dll,【C语言】编写的DLL注入工具
  2. 【Nginx】浏览器请求URL遇到错误:no-referrer-when-downgrade
  3. 安装虚拟机和docker封装
  4. python函数的传参要求_python中函数传参详解
  5. python qcut_Python之Pandas库学习(三):数据处理
  6. mysql 默认密码_mysql数据库安装
  7. linux 交叉编译 nginx,交叉编译nginx,luajit
  8. linux脚本后台,后台实时分流文件的shell脚本
  9. 怎么在pycharm打开浏览器_Mac OS下搭建 python3+pycharm+selenium+Chrome环境
  10. 中北大学c语言程序设计作业答案,C语言程序设计