C#操作Xml:使用XmlReader读Xml
XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存和IO(可能是磁盘IO或者网络IO);而在有些场景下我们必须考虑尽可能节省内存和IO的开销,这时候就该XmlReader和XmlWriter出场了。
XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束,Read()方法返回false。
如下读取Xml内容实例代码和注释说明
//玉开技术博客:http://www.cnblogs.com/yukaizhaousing System;using System.Collections.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方法直到文档结束 while (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(); } }} |

感谢@Kingthy对文中消耗IO说法提出问题,XmlReader和XmlDocument消耗的IO是一样的;不同的是XmlReader可以读取一点,显示一点,而XmlDocument必须完全读入之后才可以开始处理。
C#处理Xml的相关随笔:
C#操作Xml:使用XmlReader读Xml的更多相关文章
- 使用XmlReader读Xml
XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存和IO(可能是磁盘IO或者网络IO):而在有些场景下我们必须考虑尽可能节省内存和I ...
- python 应用xml.dom.minidom读xml
xml文件 <?xml version="1.0" encoding="utf-8"?> <city> <name>上海&l ...
- 02_Android写xml文件和读xml文件
新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml .控制台输出结果
- C#操作Xml:linq to xml操作XML
LINQ to XML提供了更方便的读写xml方式.前几篇文章的评论中总有朋友提,你为啥不用linq to xml?现在到时候了,linq to xml出场了. .Net中的System.Xml.Li ...
- C#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)【转载】
已知有一个XML文件(bookstore.xml)如下: Corets, Eva 5.95 1.插入节点 往节点中插入一个节点: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- c# 操作xml之xmlReader
xmlReader的名称空间using System.Xml; xmlReader是通过流的方式来读取xml文件的内容 <?xml version="1.0" encodin ...
- 【C#-读取XML文件】XMLReader读取XML文档
使用 XmlReader.Create("文件路径") 加载xml文件 XmlReader使用流的方式来读取. //使用XMLReader读取XML数据 XmlReader ...
- 使用XmlReader读取xml文件之二
在.net开发中经常需要读写xml形式的文件(app.config和web.config分别是WinForm和WebForm中使用到的 xml文件的一个特列,并且微软提供了通用的方法,在此就不赘述了) ...
- XML文件的写,集合XML序列化(写)。XML文件的读,递归遍历
XML文件:必须要有一个节点.检验xml文件,可以用浏览器打开,能打开表示对,否则错. 处理方法: DOM:XmlDocument文档对象模型 Sax(事件驱动,XmlReader) XmlSeria ...
随机推荐
- cocos2dx三种定时器使用
cocos2dx三种定时器的使用以及停止schedule.scheduleUpdate.scheduleOnce 今天白白跟大家分享一下cocos2dx中定时器的用法. 首先,什么是定时 ...
- HR筒子说:程序猿面试那点事
小屁孩曾经有过4年的招聘经验,期间见识了各种类型的程序猿:有大牛.有菜牛:有功成名就,有苦苦挣扎不知方向.等后来做了一枚程序猿之后发现,HR眼中的程序猿和程序猿中的HR都是不一样的.有感与此,从HR的 ...
- JVM的参数详解(转)
12年毕业到先在处理第一年外这几年纯属于打酱油,当初自学Java然后就出来找工作了,还有第一家面试就通过了挺幸运的 但之后的这段时间一直是处于吃老本的状态.最近心情真的很不好,各种黄老邪!一直处于堕落 ...
- Android+NDK+CDT+eclipse+OPenGL ES编制和native调试
周围环境: NDK版本号r8,eclipse和Android运用adt-bundle-windows-x86打包版本是更方便, 一.NDK汇集 1.源代码 NDK的examples文件夹中有Hello ...
- C#使用xpath找到一个节点
Xpath这是非常强大.但对比是一个更复杂的技术,希望上面去博客园特别想看看一些专业职位.下面是一些简单Xpath的语法和示例,给你参考 <?xml version="1.0" ...
- Java 多线程编程两个简单的例子
/** * @author gao */ package gao.org; public class RunnableDemo implements Runnable{ @Override publi ...
- 世界上速度最快的输入法 Fleksy 为了支持中国
在 Windows Phone 8.1 内置 Word Flow 宣布取得世界最快输入记录后仅几天就打破的 Fleksy 開始測试中文支持了. 总算有一次创新的输入模式里,中文不是被落下的那个.Fle ...
- Android处理延迟加载的方法
在项目开发,通过延时载入来实现满足我们的项目要求.那究竟如何来实现延时.以下结合java与android的相关方法来实现延时问题. 一.利用线程的Sleep方法 <span style=&quo ...
- Mesos-error
1,configure: error: cannot find libcurl 解决 yum install curl-devel 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- boostrap-非常好用但是容易让人忽略的地方------clearfix
代码 显示结果 代码 结果