System.Xml.XmlTextReader 类

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

注释

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

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 处理。 将 DtdProcessing 属性设置为 Prohibit 禁用 DTD 处理。

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

  • XML 数据可以包括对外部资源的引用,例如 DTD 文件。 默认情况下,外部资源是使用 XmlUrlResolver 没有用户凭据的对象解析的。 可以通过执行以下任一操作来进一步增强安全性:

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

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

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