System.Xml.XmlTextReader 类
本文提供了此 API 参考文档的补充说明。
注意
建议使用 XmlReader.Create 方法来创建 XmlReader 实例,以利用新功能。
XmlTextReader 提供对 XML 数据流的仅正向只读访问权限。 当前节点指读取器所处的节点。 读取器使用任何反映当前节点值的读取方法和属性进行推进。
此类实现 XmlReader 并符合 W3C 可扩展标记语言 (XML) 1.0 建议和 XML 中的命名空间建议。 XmlTextReader
提供了以下功能:
强制实施“格式标准的 XML”规则。
XmlTextReader
不提供数据验证。检查
DocumentType
节点的格式是否标准。XmlTextReader
会检查 DTD 的格式是否标准,但不会使用 DTD 进行验证。对于 NodeType 是
XmlNodeType.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 对象进行解析。 通过执行下列操作之一,可以使此操作更加安全:
通过将 XmlTextReader 属性设置为 XmlResolver 对象限制 XmlSecureResolver 可访问的资源。
通过将 XmlReader 属性设置为 XmlResolver,不允许
null
打开任何外部资源。
XML 数据可以包含大量属性、命名空间声明、嵌套元素等,需要大量的时间来处理。 若要限制发送到 XmlTextReader 的输入大小,请创建自定义 IStream 实现并为其提供 XmlTextReader。
ReadValueChunk 方法可用于处理大型数据流。 此方法一次读取少量的字符,而不是为整个值分配单个字符串。
默认情况下不展开常规实体。 常规实体在调用 ResolveEntity 方法时展开。