数据一致性和 XmlWriter

XmlWriter 类包括两个一致性检查设置。 可以将 XmlWriter 设置为检查写出的数据是否符合规则。

CheckCharacters 设置

XmlWriterSettings.CheckCharacters 属性指示写入器检查字符,如果任何字符不在合法 XML 字符的范围内,将引发 XmlException。 启用了字符检查后,可以确保文档中的所有字符均在 W3C XML 1.0 Recommendation(W3C XML 1.0 建议)定义的合法 XML 字符范围内。

注意注意

字符检查不会检查 XML 名称中是否存在非法字符,也不会检查所有 XML 名称是否有效。名称检查是一致性检查的标准部分。有关更多信息,请参见 http://www.w3.org/TR/REC-xml#NT-Name。

默认情况下启用字符检查。

ConformanceLevel 设置

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

注意注意

如果写入器配置为支持 ConformanceLevel.Fragment,但是 XML 数据包含文档类型定义 (DTD),写入器将引发异常。如果存在 DTD,XML 1.0 建议要求文档级别的一致性。因此,如果在配置为支持 ConformanceLevel.Fragment 的写入器上调用 WriteStartDocument 方法,写入器也将引发异常。

一致性级别

说明

Document

此设置确保输出符合格式正确的 XML 1.0 文档适用的规则,并且可以由任何兼容的处理器进行处理。

注意注意
写入器不会分析写入的 DTD 信息。用户负责确保 DTD 的格式正确。

Fragment

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

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

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

Auto

写入器基于传入的数据决定要应用的一致性检查级别。 如果不知道生成的 XML 是否将是格式正确的 XML 文档或片断,可以使用此设置。

在下列情况下应用文档一致性检查:

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

  • 根级别的文本、CDATA 或 EntityReference 节点。

  • 根级别的多个元素。

  • 根级别没有元素。

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

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

请参见

其他资源

用 XmlWriter 编写 XML