数据一致性和 XmlWriter

更新:November 2007

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