XmlReader 类

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

**命名空间:**System.Xml
**程序集:**System.Xml(在 system.xml.dll 中)

语法

声明
Public MustInherit Class XmlReader
    Implements IDisposable
用法
Dim instance As XmlReader
public abstract class XmlReader : IDisposable
public ref class XmlReader abstract : IDisposable
public abstract class XmlReader implements IDisposable
public abstract class XmlReader implements IDisposable

备注

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

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

Note重要事项:

虽然 Microsoft .NET Framework 包含 XmlReader 类的具体实现,如 XmlTextReaderXmlNodeReaderXmlValidatingReader 类,但是在 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 属性设置为 空引用(在 Visual Basic 中为 Nothing),禁止 XmlReader 打开任何外部资源。

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

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

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

继承层次结构

System.Object
  System.Xml.XmlReader
     System.Xml.XmlNodeReader
     System.Xml.XmlTextReader
     System.Xml.XmlValidatingReader

线程安全

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

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

XmlReader 成员
System.Xml 命名空间

其他资源

XML 文档和数据
安全性和 System.Xml 应用程序