使用 XmlReader 进行数据一致性检查

默认情况下,由 Create 方法创建的 XmlReader 对象比 XmlTextReader 实现一致性更强。 默认情况下,通过 Create 方法创建的 XmlReader 对象支持下列功能:

  • 标准化换行符。

  • 扩展实体。

  • 添加默认属性。

通过 XmlReaderSettings.CheckCharactersXmlReaderSettings.ConformanceLevel 属性可以指定要在已创建的 XmlReader 对象上启用的一致性检查类型。

CheckCharacters 设置

XmlReaderSettings 类的 CheckCharacters 属性指示读取器检查字符,如果任何字符不在合法 XML 字符的范围内,将引发 XmlException。 如果启用字符检查,必须确保符合下列条件:

默认情况下启用字符检查。 如果读取器正在处理文本数据,将始终检查 XML 名称是否有效,即使 CheckCharacters 属性设置为 false。

ConformanceLevel 设置

XmlReaderSettings 类的 ConformanceLevel 属性将 XmlReader 配置为检查并确保正在读取的流符合特定的规则集。 根据指定的一致性级别,可以检查 XML 数据是否符合格式正确的 XML 1.0 文档或文档片断适用的规则。 如果数据不符合规则,将引发 XmlException。 默认设置为 ConformanceLevel.Document。

注意注意

如果读取器配置为支持 ConformanceLevel.Fragment,但是 XML 数据包含文档类型定义 (DTD),将引发 XmlException。如果存在 DTD,XML 1.0 建议要求文档级别的一致性。

ConformanceLevel 值

说明

Document

XML 数据符合格式正确的 XML 1.0 文档适用的规则。 此检查级别确保任何处理器均可以使用作为 XML 1.0 document (XML 1.0 文档)读取的流。

读取器检查下列事项:

  • 顶级项不得包含 XML 声明、文档类型定义 (DTD)、元素、注释、空白或处理指令以外的任何节点。

  • XML 数据必须包含并且只包含一个顶级元素节点。

Fragment

XML 数据符合格式正确的 XML 1.0 文档片断适用的规则。

此设置接受包含多个根元素的 XML 数据或位于顶级的文本节点。 此检查级别确保任何处理器均可以使用作为 XML 1.0 external parsed entity(XML 1.0 外部分析的实体)读取的流。

注意注意
片断中不允许包含 DTD。

Auto

读取器基于传入的数据决定要应用的一致性检查级别。

如果 XML 数据包含 DTD 信息,将应用文档一致性检查。

如果 XML 数据包含下列某一项,将应用片断一致性检查。

  • 根级别的文本、CDATA 或实体引用节点。

  • 根级别的多个元素。

  • 根级别没有元素。

如果存在冲突,例如在根级别存在文本节点和 DTD 时,将引发 XmlException

如果使用 Create 方法为现有 XmlReader 添加附加功能,可以在包装方案中使用此设置。 在这种情况下,ConformanceLevel.Auto 不添加任何新的一致性检查。 一致性检查留给正在包装的 XmlReader

XmlTextReader、XmlValidatingReader 和 XmlNodeReader 对象

在使用 XmlTextReaderXmlValidatingReaderXmlNodeReader 对象时,ConformanceLevel 设置具有下列行为。

示例

以下代码创建一个强制执行片断级一致性检查的读取器。

Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
Dim reader as XmlReader = XmlReader.Create(new StringReader(xmlString), settings)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings);

请参见

概念

用 XmlReader 读取 XML

其他资源

使用 XmlReader 验证 XML 数据