手机
当前位置:查字典教程网 >编程开发 >C#教程 >基于C#中XmlReader读取Xml的深入分析
基于C#中XmlReader读取Xml的深入分析
摘要:XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存,而在有些场景下我们必...

XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存,而在有些场景下我们必须考虑尽可能节省内存.这时候就该XmlReader和XmlWriter出场了。

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

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

复制代码 代码如下:

using 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();

}

}

}

如果觉得代码不明白,下面是一张读取顺序图,标明了读取顺序号和每次读取的内容,如下图所示:

基于C#中XmlReader读取Xml的深入分析1

从图中可以看到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的结束标签

【基于C#中XmlReader读取Xml的深入分析】相关文章:

基于C#中XmlWriter写入Xml的深入分析

c#中GetType()与Typeof()的区别

C#读取XML中元素和属性值的实现代码

基于c# 接口的实例详解

基于静态Singleton模式的使用介绍

C#基础:基于const与readonly的深入研究

C# 获取枚举值的简单实例

解析C#中用Process类杀死进程,执行命令的深入分析

C#中StringBuilder用法以及和String的区别分析

基于C#中IDisposable与IEnumerable、IEnumerator的应用

精品推荐
分类导航