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

更新:November 2007

默认情况下,由 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 数据