(本文摘自MSDN)
XmlReader 类是一个提供对 XML 数据的非缓存、只进只读访问的抽象基类。该类符合 W3C 可扩展标记语言 (XML) 1.0 和 XML 中的命名空间的建议。
XmlReader 类支持从流或文件读取 XML 数据。该类定义的方法和属性使您可以浏览数据并读取节点的内容。当前节点指读取器所处的节点。使用任何返回当前节点值的读取方法和属性推进读取器。
XmlReader 类使您可以:
-
检查字符是不是合法的 XML 字符,元素和属性的名称是不是有效的 XML 名称。
-
检查 XML 文档的格式是否正确。
-
根据 DTD 或架构验证数据。
-
从 XML 流检索数据或使用提取模型跳过不需要的记录。
使用XmlReader读取XML文档之前,我们有必要了解一下这个类的属性和方法,以及节点XmlNode的类型。
1. XmlReader类的属性
名称 | 说明 |
---|---|
AttributeCount | 当在派生类中被重写时,获取当前节点上的属性数。 |
BaseURI | 当在派生类中被重写时,获取当前节点的基 URI。 |
CanReadBinaryContent | 获取一个值,该值指示 XmlReader 是否实现二进制内容读取方法。 |
CanReadValueChunk | 获取一个值,该值指示 XmlReader 是否实现 ReadValueChunk 方法。 |
CanResolveEntity | 获取一个值,该值指示此读取器是否可以分析和解析实体。 |
Depth | 当在派生类中被重写时,获取 XML 文档中当前节点的深度。 |
EOF | 当在派生类中被重写时,获取一个值,该值指示此读取器是否定位在流的结尾。 |
HasAttributes | 获取一个值,该值指示当前节点是否有任何属性。 |
HasValue | 当在派生类中被重写时,获取一个值,该值指示当前节点是否可以具有 Value。 |
IsDefault | 当在派生类中被重写时,获取一个值,该值指示当前节点是否是从 DTD 或架构中定义的默认值生成的属性。 |
IsEmptyElement | 当在派生类中被重写时,获取一个值,该值指示当前节点是否为空元素(例如 <MyElement/>)。 |
Item | 已重载。 当在派生类中被重写时,获取此属性的值。 |
LocalName | 当在派生类中被重写时,获取当前节点的本地名称。 |
Name | 当在派生类中被重写时,获取当前节点的限定名。 |
NamespaceURI | 当在派生类中被重写时,获取读取器定位在其上的节点的命名空间 URI(采用 W3C 命名空间规范中定义的形式)。 |
NameTable | 当在派生类中被重写时,获取与该实现关联的 XmlNameTable。 |
NodeType | 当在派生类中被重写时,获取当前节点的类型。 |
Prefix | 当在派生类中被重写时,获取与当前节点关联的命名空间前缀。 |
QuoteChar | 当在派生类中被重写时,获取用于括住属性节点值的引号字符。 |
ReadState | 当在派生类中被重写时,获取读取器的状态。 |
SchemaInfo | 获取作为架构验证结果分配给当前节点的架构信息。 |
Settings | 获取用于创建此 XmlReader 实例的 XmlReaderSettings 对象。 |
Value | 当在派生类中被重写时,获取当前节点的文本值。 |
ValueType | 获取当前节点的公共语言运行库 (CLR) 类型。 |
XmlLang | 当在派生类中被重写时,获取当前的 xml:lang 范围。 |
XmlSpace | 当在派生类中被重写时,获取当前的 xml:space 范围。 |
2. XmlReader类的方法
名称 | 说明 |
Close | 当在派生类中被重写时,将 ReadState 更改为 Closed。 |
Create | 已重载。 创建一个新的 XmlReader 实例。 |
Equals | 已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。) |
GetAttribute | 已重载。 当在派生类中被重写时,获取属性的值。 |
GetHashCode | 用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。) |
GetType | 获取当前实例的 Type。 (从 Object 继承。) |
IsName | 获取一个值,该值指示字符串参数是否是有效的 XML 名称。 |
IsNameToken | 获取一个值,该值指示该字符串参数是否是有效的 XML 名称标记。 |
IsStartElement | 已重载。 测试当前内容节点是否是开始标记。 |
LookupNamespace | 当在派生类中被重写时,在当前元素的范围内解析命名空间前缀。 |
MoveToAttribute | 已重载。 当在派生类中被重写时,移动到指定的属性。 |
MoveToContent | 检查当前节点是否是内容(非空白文本、CDATA、Element、EndElement、EntityReference 或 EndEntity)节点。如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。它跳过以下类型的节点:ProcessingInstruction、DocumentType、Comment、Whitespace 或 SignificantWhitespace。 |
MoveToElement | 当在派生类中被重写时,移动到包含当前属性节点的元素。 |
MoveToFirstAttribute | 当在派生类中被重写时,移动到第一个属性。 |
MoveToNextAttribute | 当在派生类中被重写时,移动到下一个属性。 |
Read | 当在派生类中被重写时,从流中读取下一个节点。 |
ReadAttributeValue | 当在派生类中被重写时,将属性值解析为一个或多个 Text、EntityReference 或 EndEntity 节点。 |
ReadContentAs | 将内容作为指定类型的对象读取。 |
ReadContentAsBase64 | 读取内容并返回 Base64 解码的二进制字节。 |
ReadContentAsBinHex | 读取内容并返回 BinHex 解码的二进制字节。 |
ReadContentAsBoolean | 将当前位置的文本内容作为 Boolean 读取。 |
ReadContentAsDateTime | 将当前位置的文本内容作为 DateTime 对象读取。 |
ReadContentAsDecimal | 将当前位置的文本内容作为 Decimal 对象读取。 |
ReadContentAsDouble | 将当前位置的文本内容作为双精度浮点数读取。 |
ReadContentAsFloat | 将当前位置的文本内容作为单精度浮点数读取。 |
ReadContentAsInt | 将当前位置的文本内容作为 32 位有符号整数读取。 |
ReadContentAsLong | 将当前位置的文本内容作为 64 位有符号整数读取。 |
ReadContentAsObject | 将当前位置的文本内容作为 Object 读取。 |
ReadContentAsString | 将当前位置的文本内容作为 String 对象读取。 |
ReadElementContentAs | 已重载。 读取当前元素,并将内容作为指定类型的对象返回。 |
ReadElementContentAsBase64 | 读取元素并对 Base64 内容进行解码。 |
ReadElementContentAsBinHex | 读取元素并对 BinHex 内容进行解码。 |
ReadElementContentAsBoolean | 已重载。 将当前元素值作为 Boolean 对象读取。 |
ReadElementContentAsDateTime | 已重载。 读取当前元素并将内容作为 DateTime 对象返回。 |
ReadElementContentAsDecimal | 已重载。 将当前元素值作为 Decimal 对象读取。 |
ReadElementContentAsDouble | 已重载。 读取当前元素并将内容作为双精度浮点数返回。 |
ReadElementContentAsFloat | 已重载。 将当前元素值作为单精度浮点数读取。 |
ReadElementContentAsInt | 已重载。 读取当前元素并将内容作为 32 位有符号整数返回。 |
ReadElementContentAsLong | 已重载。 读取当前元素并将内容作为 64 位有符号整数返回。 |
ReadElementContentAsObject | 已重载。 读取当前元素并将内容作为 Object 返回。 |
ReadElementContentAsString | 已重载。 读取当前元素并将内容作为 String 对象返回。 |
ReadElementString | 已重载。 这是一个用于读取简单纯文本元素的 Helper 方法。 |
ReadEndElement | 检查当前内容节点是否为结束标记并将读取器推进到下一个节点。 |
ReadInnerXml | 当在派生类中被重写时,将所有内容(包括标记)当做字符串读取。 |
ReadOuterXml | 当在派生类中被重写时,读取表示该节点和所有它的子级的内容(包括标记)。 |
ReadStartElement | 已重载。 检查当前节点是否为元素并将读取器推进到下一个节点。 |
ReadString | 当在派生类中被重写时,将元素或文本节点的内容当做字符串读取。 |
ReadSubtree | 返回新的 XmlReader 实例,此实例可用于读取当前节点及其所有子节点。 |
ReadToDescendant | 已重载。 让 XmlReader 前进到下一个匹配的子代元素。 |
ReadToFollowing | 已重载。 一直读取,直到找到命名元素。 |
ReadToNextSibling | 已重载。 让 XmlReader 前进到下一个匹配的同级元素。 |
ReadValueChunk | 读取嵌入在 XML 文档中的大量文本流。 |
ReferenceEquals | 确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。) |
ResolveEntity | 当在派生类中被重写时,解析 EntityReference 节点的实体引用。 |
Skip | 跳过当前节点的子级。 |
ToString | 返回表示当前 Object 的 String。 (从 Object 继承。) |
3. XmlNodeType枚举成员
成员名称 | 说明 |
---|---|
Attribute | 属性(例如,id='123')。 Attribute 节点可以具有以下子节点类型:Text 和 EntityReference。Attribute 节点不以任何其他节点类型子节点的形式出现。不将其视为 Element 的子节点。 |
CDATA | CDATA 节(例如,<![CDATA[my escaped text]]>)。CDATA 节用于转义否则将被识别为标记的文本块。CDATA 节点不能有任何子节点。它可以以 DocumentFragment、EntityReference 和 Element 节点子级的形式出现。 |
Comment | 注释(例如,<!-- my comment -->)。 Comment 节点不能有任何子节点。它可以以 Document、DocumentFragment、Element 和 EntityReference 节点子级的形式出现。 |
Document | 作为文档树的根的文档对象提供对整个 XML 文档的访问。 Document 节点可以具有以下子节点类型:XmlDeclaration、Element(最多一个)、ProcessingInstruction、Comment 和 DocumentType。它不能以任何节点类型子级的形式出现。 |
DocumentFragment | 文档片段。 DocumentFragment 节点将节点或子树与文档关联起来,而实际上并不包含在该文档中。DocumentFragment 节点可以具有以下子节点类型:Element、ProcessingInstruction、Comment、Text、CDATA 和 EntityReference。它不能以任何节点类型子级的形式出现。 |
DocumentType | 由以下标记指示的文档类型声明(例如,<!DOCTYPE...>)。 DocumentType 节点可以具有以下子节点类型:Notation 和 Entity。它可以以 Document 节点子级的形式出现。 |
Element | 元素(例如,<item>)。 Element 节点可以具有以下子节点类型:Element、Text、Comment、ProcessingInstruction、CDATA 和 EntityReference。它可以是 Document、DocumentFragment、EntityReference 和 Element 节点的子级。 |
EndElement | 末尾元素标记(例如,</item>)。 当 XmlReader 到达元素的末尾时,返回 EndElement 节点。 |
EndEntity | 由于调用 ResolveEntity 而使 XmlReader 到达实体替换的末尾时返回。 |
Entity | 实体声明(例如,<!ENTITY...>)。 Entity 节点可以具有表示已展开实体的子节点(例如 Text 和 EntityReference 节点)。它可以以 DocumentType 节点子级的形式出现。 |
EntityReference | 实体引用(例如,#)。 EntityReference 节点可以具有以下子节点类型:Element、ProcessingInstruction、Comment、Text、CDATA 和 EntityReference。它可以以 Attribute、DocumentFragment、Element 和 EntityReference 节点子级的形式出现。 |
None | 如果未调用 Read 方法,则由 XmlReader 返回。 |
Notation | 文档类型声明中的表示法(例如,<!NOTATION...>)。Notation 节点不能具有任何子节点。它可以以 DocumentType 节点子级的形式出现。 |
ProcessingInstruction | 处理指令(例如,<?pi test?>)。 ProcessingInstruction 节点不能具有任何子节点。它可以以 Document、DocumentFragment、Element 和 EntityReference 节点子级的形式出现。 |
SignificantWhitespace | 混合内容模型中标记间的空白或 xml:space="preserve" 范围内的空白。 |
Text | 节点的文本内容。 Text 节点不能具有任何子节点。它可以以 Attribute、DocumentFragment、Element 和 EntityReference 节点的子节点的形式出现。 |
Whitespace | 标记间的空白。 |
XmlDeclaration | XML 声明(例如,<?xml version='1.0'?>)。XmlDeclaration 节点必须是文档中的第一个节点。它不能具有子级。它是 Document 节点的子级。它可以具有提供版本和编码信息的属性。 |