System.Xml.XmlTextReader 类

本文提供了此 API 参考文档的补充说明。

注意

建议使用 XmlReader.Create 方法来创建 XmlReader 实例,以利用新功能。

XmlTextReader 提供对 XML 数据流的仅正向只读访问权限。 当前节点指读取器所处的节点。 读取器使用任何反映当前节点值的读取方法和属性进行推进。

此类实现 XmlReader 并符合 W3C 可扩展标记语言 (XML) 1.0 建议和 XML 中的命名空间建议。 XmlTextReader 提供了以下功能:

  • 强制实施“格式标准的 XML”规则。

  • XmlTextReader 不提供数据验证。

  • 检查 DocumentType 节点的格式是否标准。 XmlTextReader 会检查 DTD 的格式是否标准,但不会使用 DTD 进行验证。

  • 对于 NodeTypeXmlNodeType.EntityReference 的节点,将返回一个空的 EntityReference 节点(即 Value 属性为 String.Empty)。

注意

DTD 中实体的实际声明称为 Entity 节点。 在数据中引用这些节点时,它们称为 EntityReference 节点。

  • 不要展开默认属性。

由于 XmlTextReader 不执行数据验证所需的额外检查,因此可提供快速格式检查分析器。

若要执行数据验证,请使用验证 XmlReader

若要从 XmlDocument 中读取 XML 数据,请使用 XmlNodeReader

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

安全注意事项

以下是使用 XmlTextReader 类时要考虑的事项。

  • XmlTextReader 抛出的异常可能会泄露不希望向上层应用程序传递的路径信息。 应用程序必须捕获异常并进行相应的处理。

  • 默认情况下启用 DTD 处理。 如果您担心拒绝服务问题或您在处理不可信的源,请禁用 DTD 处理。 要禁用 DTD 处理,请将 DtdProcessing 属性设置为 Prohibit

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

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

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

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

  • 默认情况下不展开常规实体。 常规实体在调用 ResolveEntity 方法时展开。