代码改变世界

ASP.NET 2.0 XML 系列(4):用XmlReader类介绍

2008-03-15 16:02  敏捷的水  阅读(1752)  评论(0编辑  收藏  举报

 

xmlreader

(本文摘自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 检查当前节点是否是内容(非空白文本、CDATAElementEndElementEntityReferenceEndEntity)节点。如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。它跳过以下类型的节点:ProcessingInstructionDocumentTypeCommentWhitespaceSignificantWhitespace
MoveToElement 当在派生类中被重写时,移动到包含当前属性节点的元素。
MoveToFirstAttribute 当在派生类中被重写时,移动到第一个属性。
MoveToNextAttribute 当在派生类中被重写时,移动到下一个属性。
Read 当在派生类中被重写时,从流中读取下一个节点。
ReadAttributeValue 当在派生类中被重写时,将属性值解析为一个或多个 TextEntityReferenceEndEntity 节点。
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  返回表示当前 ObjectString。 (从 Object 继承。)

 

3. XmlNodeType枚举成员

 

成员名称 说明
Attribute 属性(例如,id='123')。 Attribute 节点可以具有以下子节点类型:TextEntityReferenceAttribute 节点不以任何其他节点类型子节点的形式出现。不将其视为 Element 的子节点。
CDATA CDATA 节(例如,<![CDATA[my escaped text]]>)。CDATA 节用于转义否则将被识别为标记的文本块。CDATA 节点不能有任何子节点。它可以以 DocumentFragmentEntityReferenceElement 节点子级的形式出现。
Comment 注释(例如,<!-- my comment -->)。 Comment 节点不能有任何子节点。它可以以 DocumentDocumentFragmentElementEntityReference 节点子级的形式出现。
Document 作为文档树的根的文档对象提供对整个 XML 文档的访问。 Document 节点可以具有以下子节点类型:XmlDeclarationElement(最多一个)、ProcessingInstructionCommentDocumentType。它不能以任何节点类型子级的形式出现。
DocumentFragment 文档片段。 DocumentFragment 节点将节点或子树与文档关联起来,而实际上并不包含在该文档中。DocumentFragment 节点可以具有以下子节点类型:ElementProcessingInstructionCommentTextCDATAEntityReference。它不能以任何节点类型子级的形式出现。
DocumentType 由以下标记指示的文档类型声明(例如,<!DOCTYPE...>)。 DocumentType 节点可以具有以下子节点类型:NotationEntity。它可以以 Document 节点子级的形式出现。
Element 元素(例如,<item>)。 Element 节点可以具有以下子节点类型:ElementTextCommentProcessingInstructionCDATAEntityReference。它可以是 DocumentDocumentFragmentEntityReferenceElement 节点的子级。
EndElement 末尾元素标记(例如,</item>)。 当 XmlReader 到达元素的末尾时,返回 EndElement 节点。
EndEntity 由于调用 ResolveEntity 而使 XmlReader 到达实体替换的末尾时返回。
Entity 实体声明(例如,<!ENTITY...>)。 Entity 节点可以具有表示已展开实体的子节点(例如 TextEntityReference 节点)。它可以以 DocumentType 节点子级的形式出现。
EntityReference 实体引用(例如,&num;)。 EntityReference 节点可以具有以下子节点类型:ElementProcessingInstructionCommentTextCDATAEntityReference。它可以以 AttributeDocumentFragmentElementEntityReference 节点子级的形式出现。
None 如果未调用 Read 方法,则由 XmlReader 返回。
Notation 文档类型声明中的表示法(例如,<!NOTATION...>)。Notation 节点不能具有任何子节点。它可以以 DocumentType 节点子级的形式出现。
ProcessingInstruction 处理指令(例如,<?pi test?>)。 ProcessingInstruction 节点不能具有任何子节点。它可以以 DocumentDocumentFragmentElementEntityReference 节点子级的形式出现。
SignificantWhitespace 混合内容模型中标记间的空白或 xml:space="preserve" 范围内的空白。
Text 节点的文本内容。 Text 节点不能具有任何子节点。它可以以 AttributeDocumentFragmentElementEntityReference 节点的子节点的形式出现。
Whitespace 标记间的空白。
XmlDeclaration XML 声明(例如,<?xml version='1.0'?>)。XmlDeclaration 节点必须是文档中的第一个节点。它不能具有子级。它是 Document 节点的子级。它可以具有提供版本和编码信息的属性。