System.Xml.XmlReader 类

方法描述

表示提供对 XML 数据进行快速、非缓存、只进访问的读取器。

语法定义(C# System.Xml.XmlReader 类 的用法)

public abstract class XmlReader : IDisposable

构造函数

构造函数名称 构造函数描述
XmlReader 初始化 XmlReader 类的新实例。

成员/方法

方法名称 方法描述
Close 当在派生类中被重写时,将 ReadState 更改为 Closed。
Create(Stream) 使用指定的流创建一个新的 XmlReader 实例。
Create(String) 使用指定的 URI 创建一个新的 XmlReader 实例。
Create(TextReader) 使用指定的 TextReader 创建一个新的 XmlReader 实例。
Create(Stream, XmlReaderSettings) 使用指定的流和 XmlReaderSettings 对象创建一个新的 XmlReader 实例。
Create(String, XmlReaderSettings) 使用指定的 URI 和 XmlReaderSettings 创建一个新的实例。
Create(TextReader, XmlReaderSettings) 使用指定的 TextReader 和 XmlReaderSettings 对象创建一个新的 XmlReader 实例。
Create(XmlReader, XmlReaderSettings) 使用指定的 XmlReader 和 XmlReaderSettings 对象创建一个新的 XmlReader 实例。
Create(Stream, XmlReaderSettings, String) 使用指定的流、基 URI 和 XmlReaderSettings 对象创建一个新的 XmlReader 实例。
Create(Stream, XmlReaderSettings, XmlParserContext) 使用指定的流、XmlReaderSettings 和 XmlParserContext 对象创建一个新的 XmlReader 实例。
Create(String, XmlReaderSettings, XmlParserContext) 使用指定的 URI、XmlReaderSettings 和 XmlParserContext 对象创建一个新的 XmlReader 实例。
Create(TextReader, XmlReaderSettings, String) 使用指定的 TextReader、XmlReaderSettings 和基 URI 创建一个新的 XmlReader 实例。
Create(TextReader, XmlReaderSettings, XmlParserContext) 使用指定的 TextReader、XmlReaderSettings 和 XmlParserContext 对象创建一个新的 XmlReader 实例。
Dispose()
Dispose(Boolean) 释放由 XmlReader 占用的非托管资源,还可以另外再释放托管资源。
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetAttribute(Int32) 当在派生类中被重写时,获取具有指定索引的特性的值。
GetAttribute(String) 当在派生类中被重写时,获取具有指定 Name 的特性的值。
GetAttribute(String, String) 当在派生类中被重写时,获取具有指定 LocalName 和 NamespaceURI 的特性的值。
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetType 获取当前实例的 Type。 (继承自 Object。)
IsName 获取一个值,该值指示字符串参数是否是有效的 XML 名称。
IsNameToken 获取一个值,该值指示该字符串参数是否是有效的 XML 名称标记。
IsStartElement() 调用 MoveToContent 并测试当前内容节点是否是开始标记或空元素标记。
IsStartElement(String) 调用 MoveToContent 并测试当前内容节点是否是开始标记或空元素标记,以及所找到元素的 Name 属性是否与给定的参数匹配。
IsStartElement(String, String) 调用 MoveToContent 并测试当前内容节点是否是开始标记或空元素标记,以及所找到元素的 LocalName 和 NamespaceURI 属性是否与给定的字符串匹配。
LookupNamespace 当在派生类中被重写时,在当前元素的范围内解析命名空间前缀。
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
MoveToAttribute(Int32) 当在派生类中被重写时,移动到具有指定索引的特性。
MoveToAttribute(String) 当在派生类中被重写时,移动到具有指定 Name 的特性。
MoveToAttribute(String, String) 当在派生类中被重写时,移动到具有指定的 LocalName 和 NamespaceURI 的特性。
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(Type, IXmlNamespaceResolver) 将元素内容作为请求类型读取。
ReadElementContentAs(Type, IXmlNamespaceResolver, String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后将元素内容作为请求类型读取。
ReadElementContentAsBase64 读取元素并对 Base64 内容进行解码。
ReadElementContentAsBinHex 读取元素并对 BinHex 内容进行解码。
ReadElementContentAsBoolean() 读取当前元素并将内容作为 Boolean 对象返回。
ReadElementContentAsBoolean(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 Boolean 对象返回。
ReadElementContentAsDateTime() 读取当前元素并将内容作为 DateTime 对象返回。
ReadElementContentAsDateTime(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 DateTime 对象返回。
ReadElementContentAsDecimal() 读取当前元素并将内容作为 Decimal 对象返回。
ReadElementContentAsDecimal(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 Decimal 对象返回。
ReadElementContentAsDouble() 读取当前元素并将内容作为双精度浮点数返回。
ReadElementContentAsDouble(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为双精度浮点数返回。
ReadElementContentAsFloat() 读取当前元素并将内容作为单精度浮点数返回。
ReadElementContentAsFloat(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为单精度浮点数返回。
ReadElementContentAsInt() 读取当前元素并将内容作为 32 位有符号整数返回。
ReadElementContentAsInt(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 32 位有符号整数返回。
ReadElementContentAsLong() 读取当前元素并将内容作为 64 位有符号整数返回。
ReadElementContentAsLong(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 64 位有符号整返回。
ReadElementContentAsObject() 读取当前元素并将内容作为 Object 返回。
ReadElementContentAsObject(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 Object 返回。
ReadElementContentAsString() 读取当前元素并将内容作为 String 对象返回。
ReadElementContentAsString(String, String) 检查指定的本地名称和命名空间 URI 与当前元素的本地名称和命名空间 URI 是否匹配,然后读取当前元素,并将内容作为 String 对象返回。
ReadElementString() 读取纯文本元素。
ReadElementString(String) 在读取纯文本元素之前,检查所找到元素的 Name 属性是否与给定的字符串匹配。
ReadElementString(String, String) 在读取纯文本元素之前,检查所找到元素的 LocalName 和 NamespaceURI 属性是否与给定的字符串匹配。
ReadEndElement 检查当前内容节点是否为结束标记并将读取器推进到下一个节点。
ReadInnerXml 当在派生类中被重写时,将所有内容(包括标记)当做字符串读取。
ReadOuterXml 当在派生类中被重写时,读取表示该节点和所有它的子级的内容(包括标记)。
ReadStartElement() 检查当前节点是否为元素并将读取器推进到下一个节点。
ReadStartElement(String) 检查当前内容节点是否为具有给定 Name 的元素并将读取器推进到下一个节点。
ReadStartElement(String, String) 检查当前内容节点是否为具有给定 LocalName 和 NamespaceURI 的元素并将读取器推进到下一个节点。
ReadString 当在派生类中被重写时,将元素或文本节点的内容当做字符串读取。
ReadSubtree 返回新的 XmlReader 实例,此实例可用于读取当前节点及其所有子节点。
ReadToDescendant(String) 让 XmlReader 前进到下一个具有指定限定名的子代元素。
ReadToDescendant(String, String) 让 XmlReader 前进到下一个具有指定的本地名称和命名空间 URI 的子代元素。
ReadToFollowing(String) 一直读取,直到找到具有指定限定名的元素。
ReadToFollowing(String, String) 一直读取,直到找到具有指定的本地名称和命名空间 URI 的元素。
ReadToNextSibling(String) 让 XmlReader 前进到下一个具有指定限定名的同级元素。
ReadToNextSibling(String, String) 让 XmlReader 前进到下一个具有指定的本地名称和命名空间 URI 的同级元素。
ReadValueChunk 读取嵌入在 XML 文档中的大量文本流。
ResolveEntity 当在派生类中被重写时,解析 EntityReference 节点的实体引用。
Skip 跳过当前节点的子级。
ToString 返回表示当前对象的字符串。 (继承自 Object。)

提示和注释

XmlReader 提供对 XML 数据流的只进只读访问。 XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。

当前节点指读取器定位到的节点。 使用任何读方法推进读取器并且属性反映当前节点的值。

重要事项

虽然 Microsoft .NET Framework 包含 XmlReader 类的具体实现,如 XmlTextReader、XmlNodeReader 和 XmlValidatingReader 类,但是在 2.0 版本中,建议的做法是使用 Create 方法创建 XmlReader 实例。 有关更多信息,请参见 创建 XML 读取器。

XmlReader 在发生 XML 分析错误时引发 XmlException。 引发异常后,读取器的状态不可预知。 例如,报告的节点类型可能不同于当前节点的实际节点类型。 使用 ReadState 属性可以检查读取器是否处于错误状态。

有关 XmlReader 类的进一步论述,请参见 用 XmlReader 读取 XML。

安全注意事项

以下是使用 XmlReader 类时的注意事项。

XmlReader 引发的异常会泄漏您不希望冒泡到应用程序的路径信息。 应用程序必须捕捉并适当处理这些异常。

如果您担心出现拒绝服务问题或要处理非信任源,请不要启用 DTD 处理。 对于通过 Create 方法创建的 XmlReader 对象,默认情况下会禁用 DTD 处理。

如果已经启用了 DTD 处理,则可以使用 XmlSecureResolver 限制 XmlReader 可以访问的资源。 还可以设计应用程序以使 XML 处理受内存和时间的约束。 例如,在 ASP.NET 应用程序中配置超时限制。

XML 数据可以包括对外部资源(例如,架构文件)的引用。 在默认情况下,使用不具有用户凭据的 XmlUrlResolver 对象解析外部资源。 通过执行下列操作之一,可以使此操作更加安全:

通过将 XmlReaderSettings.XmlResolver 属性设置为 XmlSecureResolver 对象,限制 XmlReader 可访问的资源。

通过将 XmlReaderSettings.XmlResolver 属性设置为 null,禁止 XmlReader 打开任何外部资源。

XML 数据可以包含大量需要很多时间才能处理的特性、命名空间声明、嵌套元素等。 若要限制发送到 XmlReader 的输入大小,请创建自定义 IStream 实现并为其提供 XmlReader。

可使用 ReadValueChunk 方法处理较大的数据流。 此方法一次读取少量字符,而不是为整个值分配一个字符串。

如果读取的 XML 文档具有大量唯一的本地名称、命名空间或前缀,则可能会发生问题。 如果您要使用从 XmlReader 派生的类,并为每个项调用了 LocalName、Prefix 或 NamespaceURI 属性,则返回的字符串将被添加到 NameTable。 NameTable 包含的集合的大小决不会减小,它会创建字符串句柄的虚拟“内存泄漏”。 缓解这种情况的一种方法是,从 NameTable 类派生并强制使用最大大小的配额。 (无法阻止使用 NameTable,或者在它已满时切换 NameTable)。 另一种缓解是避免使用提到的属性,而是在可能时结合使用 MoveToAttribute 方法和 IsStartElement 方法;这些方法不返回字符串,从而避免了溢出 NameTable 集合的问题。

System.Xml.XmlReader 类例子


继承层次结构

System.Object

System.Xml.XmlReader

System.Xml.XmlDictionaryReader

System.Xml.XmlNodeReader

System.Xml.XmlTextReader

System.Xml.XmlValidatingReader

命名空间

namespace: System.Xml

程序集: System.Xml(在 System.Xml.dll 中)

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。