本文提供了此 API 参考文档的补充说明。
注释
建议您使用XmlReader方法创建XmlReader.Create实例,以利用新功能。
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 处理。 将 DtdProcessing 属性设置为 Prohibit 禁用 DTD 处理。
如果启用了 DTD 处理,则可以使用 XmlSecureResolver 来限制 XmlTextReader 可以访问的资源。 还可以设计应用程序,使 XML 处理受内存和时间限制。 例如,在 ASP.NET 应用程序中配置超时限制。
XML 数据可以包括对外部资源的引用,例如 DTD 文件。 默认情况下,外部资源是使用 XmlUrlResolver 没有用户凭据的对象解析的。 可以通过执行以下任一操作来进一步增强安全性:
通过将XmlTextReader属性设置为XmlResolver对象,限制XmlSecureResolver可访问的资源。
不允许 XmlReader 通过设置 XmlResolver 属性为
null
来打开任何外部资源。
XML 数据可以包含大量属性、命名空间声明、嵌套元素等,这些属性需要大量时间来处理。 若要限制发送到XmlTextReader的输入大小,请创建一个自定义的 IStream 实现并将其应用于XmlTextReader。
该方法 ReadValueChunk 可用于处理大型数据流。 此方法一次读取少量字符,而不是为整个值分配单个字符串。
默认情况下不展开常规实体。 常规实体在调用 ResolveEntity 方法时展开。