C# XmlReader/XmlWriter 类

  XmlReader用于读取Xml文件,XmlWriter用于将数据写到Xml文件。其实,在印象当中,XML很多的操作类都支持直接Save、Read也支持接受XmlReader与XmlWriter类的示例作为参数,但是为什么还要有这个两类来专门用于读写XML文件呢?因为它们有强大的自定义格式功能;

一、XmlReader的使用

  XmlReader类专门用于读取Xml文件,最大的特点在于支持Settings。

属性 说明
AttributeCount 当在派生类中被重写时,获取当前节点上的属性数
BaseURI 当在派生类中被重写时,获取当前节点的基 URI
CanReadBinaryContent 获取一个值,该值指示 XmlReader 是否实现二进制内容读取方法
Depth 获取 XML 文档中当前节点的深度
EOF 获取一个值,该值指示此读取器是否定位在流的结尾
HasAttributes 获取一个值,该值指示当前节点是否有任何属性
HasValue 获取一个值,该值指示当前节点是否可以具有 Value
IsDefault 获取一个值,该值指示当前节点是否是从 DTD 或架构中定义的默认值生成的特性
IsEmptyElement  获取一个值,该值指示当前节点是否为空元素(例如 <MyElement/>)
Item 获取具有指定索引的属性的值,支持整形,字符串,LocalName 和 NamespaceURI作为参数
LocalName 获取当前节点的本地名称
Name 获取当前节点的限定名
NamespaceURI 获取读取器定位在其上的节点的命名空间 URI
NameTable 获取与该实现关联的 XmlNameTable
NodeType 获取当前节点的类型
Prefix 获取与当前节点关联的命名空间前缀
QuoteChar 获取用于括住特性节点值的引号字符
ReadState 获取读取器的状态
SchemaInfo 获取作为架构验证结果分配给当前节点的架构信息
Settings 获取用于创建此 XmlReader 实例的 XmlReaderSettings 对象
Value 获取当前节点的文本值
ValueType 获取当前节点的公共语言运行时 (CLR) 类型
XmlLang 获取当前的 xml:lang 范围
XmlSpace 获取当前的 xml:space 范围

  常用方法:

方法 说明
Close 将 ReadState 更改为 Closed
Create 使用指定的参数类型创建一个新的 XmlReader 实例
Dispose 释放由 XmlReader 类的当前实例占用的所有资源
GetAttribute 当在派生类中被重写时,获取具有指定索引的属性的值
GetValueAsync 异步获取当前节点的值
IsName 返回一个值,该值指示字符串参数是否是有效的 XML 名称
IsNameToken 返回一个值,该值指示该字符串参数是否是有效的 XML 名称标记
IsStartElement 调用 MoveToContent 并测试当前内容节点是否是开始标记或空元素标记
LookupNamespace 在当前元素的范围内解析命名空间前缀
MoveToAttribute 移动到具有指定索引的属性
MoveToContent
如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。
它跳过以下类型的节点:ProcessingInstruction、DocumentType、Comment、Whitespace 或 SignificantWhitespace

MoveToElement 移动到包含当前属性节点的元素
MoveToFirstAttribute 移动到第一个属性
MoveToNextAttribute 移动到下一个属性
Read 从流中读取下一个节点
ReadAttributeValue 将属性值解析为一个或多个 Text、EntityReference 或 EndEntity 节点
ReadContentAs 将内容作为指定类型的对象读取
ReadStartElement 检查当前节点是否为元素并将读取器推进到下一个节点
ReadElementContentAs 将元素内容作为请求类型读取
ReadElementString 读取纯文本元素
ReadEndElement  检查当前内容节点是否为结束标记并将读取器推进到下一个节点
ReadInnerXml 将所有内容(包括标记)当做字符串读取
ReadOuterXml  读取表示该节点和所有它的子级的内容(包括标记)
ReadString 将元素或文本节点的内容当做字符串读取
ReadSubtree 此实例可用于读取当前节点及其所有子节点
ReadToDescendant 让 XmlReader 前进到下一个具有指定限定名的子代元素
ReadToFollowing 一直读取,直到找到具有指定限定名的元素
ReadToNextSibling 让 XmlReader 前进到下一个具有指定限定名的同级元素
ReadValueChunk 读取嵌入在 XML 文档中的大量文本流
ResolveEntity 解析 EntityReference 节点的实体引用
Skip 跳过当前节点的子级

  示例:

    class Program
    {
        static void Main(string[] args)
        {
            //<?xml version="1.0" encoding="utf-8"?>
            //<Persons>
            //  <Person>
            //    <Name>刘备</Name>
            //    <Age>28</Age>
            //  </Person>
            //</Persons>

            XmlReader reader = XmlReader.Create(@"D:\123.xml");
            reader.ReadString();
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.Name == "Name")
                    {
                        Console.WriteLine(reader.ReadElementString());  //刘备
                        Console.WriteLine(reader.HasAttributes);    //false
                    }
                }
            }

            Console.ReadKey();
        }
    }

  大多数方法和属性的使用方法都和上面的例子相似,不在啰嗦。下面来说说,XmlReader的特色功能,自定义格式,其中最主要用到的是属性Settings。

  示例2:

        static void Main(string[] args)
        {
            //<?xml version="1.0" encoding="utf-8"?>
            //<Persons>
            //  <Person>
            //    <!-- 这是一个牛人 -->
            //    <Name>刘备</Name>
            //    <Age>28</Age>
            //  </Person>
            //</Persons>

            XmlReaderSettings RSetting = new XmlReaderSettings();
            RSetting.IgnoreComments = false;    //如果设置为true则忽略所有注释

            XmlReader reader = XmlReader.Create(@"D:\123.xml", RSetting);
            reader.ReadString();
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Comment)
                {
                    Console.WriteLine(reader.Value);    //这是一个牛人
                }
            }

            Console.ReadKey();
        }
    }

二、XmlWriter的使用

  常用属性:

属性 说明
Settings 获取用于创建此 XmlWriter 实例的 XmlWriterSettings 对象
WriteState 当在派生类中被重写时,获取编写器的状态
XmlLang 当在派生类中被重写时,获取当前的 xml:lang 范围
XmlSpace 当在派生类中被重写时,获取表示当前 xml:space 范围的 XmlSpace

  常用方法:

方法 说明
Close 当在派生类中被重写时,关闭此流和基础流
Create 使用指定的流创建一个新的 XmlWriter 实例
Dispose 释放由 XmlWriter 类的当前实例占用的所有资源
Flush 将缓冲区中的所有内容刷新到基础流,并同时刷新基础流
LookupPrefix 返回在当前命名空间范围中为该命名空间 URI 定义的最近的前缀
WriteAttributes 写出在 XmlReader 中当前位置找到的所有属性
WriteAttributeString 写出具有指定的本地名称和值的属性
WriteBase64 将指定的二进制字节编码为 Base64 并写出结果文本
WriteBinHex 将指定的二进制字节编码为 BinHex 并写出结果文本
WriteCData 写出包含指定文本的 <![CDATA[...]]> 块
WriteCharEntity 为指定的 Unicode 字符值强制生成字符实体
WriteChars 以每次一个缓冲区的方式写入文本
WriteComment 写出包含指定文本的注释 <!--...-->
WriteDocType 写出具有指定名称和可选属性的 DOCTYPE 声明
WriteElementString 编写具有指定的本地名称和值的元素
WriteEndAttribute 关闭上一个 WriteStartAttribute 调用
WriteStartDocument 编写版本为"1.0"的 XML 声明
WriteEndDocument 关闭任何打开的元素或属性并将编写器重新设置为 Start 状态
WriteStartElemen 写入指定的开始标记并将其与给定的命名空间和前缀关联起来
WriteEndElement 关闭一个元素并弹出相应的命名空间范围
WriteEntityRef 按 &name; 写出实体引用
WriteFullEndElement 关闭一个元素并弹出相应的命名空间范围
WriteName 写出指定的名称,确保它是符合 W3C XML 1.0 建议
WriteNmToken 写出指定的名称,确保它是符合 W3C XML 1.0 建议
WriteNode 将所有内容从读取器复制到编写器并将读取器移动到下一个同级的
WriteProcessingInstruction 写出在名称和文本之间带有空格的处理指令
WriteQualifiedName 写出命名空间限定的名称。 此方法查找位于给定命名空间范围内的前缀
WriteRaw 从字符串手动编写原始标记
WriteStartAttribute 用指定的本地名称编写属性的起点
WriteString 编写给定的文本内容
WriteSurrogateCharEntity 为代理项字符对生成并编写代理项字符实体
WriteValue 编写一个参数中指定的类型的值
WriteWhitespace 写出给定的空白

  示例:

        static void Main(string[] args)
        {
            //<?xml version="1.0" encoding="utf-8" standalone="yes"?><Persons><Person><Name>刘备</Name><Age>28</Age></Person></Persons>

            using (FileStream fs = new FileStream(@"D:\123.xml",FileMode.Create,FileAccess.Write))
            {
                using (XmlWriter xw = XmlWriter.Create(fs))
                {
                    //XML声明
                    xw.WriteStartDocument(true);
                    xw.WriteStartElement("Persons");
                    xw.WriteStartElement("Person");
                    xw.WriteStartElement("Name");
                    xw.WriteString("刘备");
                    xw.WriteEndElement();
                    xw.WriteStartElement("Age");
                    xw.WriteValue(28);
                    xw.WriteEndElement();
                    xw.WriteEndElement();
                    xw.WriteEndElement();
                    xw.WriteEndDocument();
                }
            }
            Console.ReadKey();
        }

  上面的注释就是代码所生成的文档。

  上面生成的XML有些问题,没换行,没法看。而且,如果我想去掉XML声明又怎么搞?

  示例2:

        static void Main(string[] args)
        {
            //<Persons>
            //  <Person>
            //    <Name>刘备</Name>
            //    <Age>28</Age>
            //  </Person>
            //</Persons>

            XmlWriterSettings WSetting = new XmlWriterSettings();
            //去掉XML声明
            WSetting.OmitXmlDeclaration = true;
            WSetting.Indent = true;

            using (FileStream fs = new FileStream(@"D:\123.xml",FileMode.Create,FileAccess.Write))
            {
                using (XmlWriter xw = XmlWriter.Create(fs, WSetting))
                {
                    //XML声明
                    xw.WriteStartElement("Persons");
                    xw.WriteStartElement("Person");
                    xw.WriteStartElement("Name");
                    xw.WriteString("刘备");
                    xw.WriteEndElement();
                    xw.WriteStartElement("Age");
                    xw.WriteValue(28);
                    xw.WriteEndElement();
                    xw.WriteEndElement();
                    xw.WriteEndElement();
                }
            }
            Console.ReadKey();
        }

  这样生成的XML就又缩进又去掉命名空间了,更多的设置在XmlWriterSettings类的实例中设置。

时间: 2024-12-18 11:25:15

C# XmlReader/XmlWriter 类的相关文章

C#-XML

XML用处 存储配置文件,存储数据用于远程传输等..net提供了system.xml命名空间的类,用于读写xml文件(XmlTextReader.XmlWriter),分析xml文件结构(XmlNode.XmlDocument),转换xml文件格式成其他格式文件(XmlTransform),用xml类处理数据,用XPath类在xml文件查询. 理解XML XML.SGML通用标记语言的子集,这语言派生出HTML和XML.XML是与人工可读元数据相结合的人工可读数据.元素,包含一对标签和一个值.x

.NET下XML文件的读写

一.前言: XML是微软.Net战略的一个重要组成部分,而且它可谓是XML Web服务的基石,所以掌握.Net框架下的XML技术自然显得非常重要了.本文将指导大家如何运用C#语言完成.Net框架下的XML文档的读写操作.首先,我会向大家介绍.Net框架中与XML相关的命名空间和其中的重要类.其次,我还会给出有关的实例以使读者更进一步的了解XML文档的读写操作的具体方法. 二.XML命名空间和相关类简介: 在深入进行.Net框架下的XML文档的操作之前,我想很有必要向大家介绍.Net框架中与XML

PHP-php.ini中文版

今天细看了下配置文件 有很多没用过的 就从网上搜了一篇 常看看 ;;;;;;;;;;;;;;;; 简介 ;;;;;;;;;;;;;;;;; 本文并非是对英文版 php.ini 的简单翻译,而是参考了众多资料以后,结合自己的理解,增加了许多内容,; 包括在原有 php.ini 基础上增加了一些实用模块的配置说明,同时对文件内容的安排进行了调整.; 由于作者不喜欢 no-free 的玩意儿,所以删除了除 MySQL 和 PostgreSQL 以外的其他数据库模块配置选项. ;;;;;;;;;;;;;

.NET中的XML一

1.XML的特点 与html相似,XML是一种显示数据的标记语言,它可以使数据通过网络无障碍地进行传输.同样它也可以显示在用户的浏览器上,在日常的编程中可以发现XML用的也是特别多,比如我们解决方案的配置文件等.XML的主要功能是存储数据,有效的将数据和显示分离,它的重点是有序和合理地存储数据.XML可以自定义标签,还可以是中文,可以按自己的意愿充分表达文件的内容.可以看出XML最大的优势在于对数据的管理,再加上异构系统间的信息互通和更加精确的搜索,这就是我要掌握XML的原因.下面是一段XML代

Memcache缓存服务器(Nginx+php+Memcache+MySQL)

一.MemCache简介: MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度.MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串.对象等)所使用的key-value存储,数据可以来自数据库调用.API调用,或者页面渲染的结果.MemCache设计理念就是小而强大,它简单的设计促进了快速部署.易于开发并解决面对大规模的数据缓

11.C#操作XML

1..NET对读写XML文件的支持 (1)System.Xml命名空间 System.Xml命名空间为处理XML提供基于标准的支持,其中提供了许多管理XML文档和XML流方式的类,还提供了一些类(例如XmlDataDocument)则是提供了XML数据存储器和存储在DataSet中的关系数据之间的桥梁. 以下是System.Xml命名空间读写XML较重要的类: XmlReader       表示提供XM数据进行快速.非缓存.只进访问的读取器. XmlWriter       提供一种快速.非缓

XML 文档和数据

.NET Framework 4.5 其他版本 .NET Framework 提供了一组全面而集成的类,可用来方便地生成可以识别 XML 的应用程序. 通过以下命名空间中的类,可以分析和编写 XML,编辑内存中的 XML 数据,进行数据验证以及 XSLT 转换. System.Xml System.Xml.XPath System.Xml.Xsl System.Xml.Schema System.Xml.Linq 有关完整列表,请参阅 System.Xml 命名空间网页. 这些命名空间中的类支持

asp.net序列化跟反序列化

.net序列化及反序列化 在我们深入探讨C#序列化和反序列化之前我们先要明白什么是序列化,它又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方..NET框架提供了两种串行化的方式: 1.是使用BinaryFormatter进行串行化:2.使用SoapFormatter进行串行化:3.使用Xm

[转载]最完整PHP.INI中文版

[转载]最完整PHP.INI中文版 http://www.21andy.com/blog/20090718/1344.html 最完整PHP.INI中文版 适用于 php-5.2 的 php.ini 中文版作者:金步国 ;;;;;;;;;;;;;;;;;;; 关于php.ini ;;;;;;;;;;;;;;;;;;;; 这个文件必须命名为'php.ini'并放置在httpd.conf中PHPINIDir指令指定的目录中.; 最新版本的php.ini可以在下面两个位置查看:; http://cvs