ASP.NET 2.0 XML 系列(4):用XmlReader类介绍
2008-03-15 16:02 敏捷的水 阅读(1768) 评论(0) 收藏 举报
(本文摘自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 节点的子级。它可以具有提供版本和编码信息的属性。 |
扫码关注公众号,了解更多管理,见识,育儿等内容
作者: 王德水
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。
浙公网安备 33010602011771号