XmlReaderSettings.ConformanceLevel 属性

定义

获取或设置 XmlReader 将遵循的一致性级别。

public:
 property System::Xml::ConformanceLevel ConformanceLevel { System::Xml::ConformanceLevel get(); void set(System::Xml::ConformanceLevel value); };
public System.Xml.ConformanceLevel ConformanceLevel { get; set; }
member this.ConformanceLevel : System.Xml.ConformanceLevel with get, set
Public Property ConformanceLevel As ConformanceLevel

属性值

ConformanceLevel

指定一致性级别(XML 读取器将强制该级别)的枚举值之一。 默认值为 Document

示例

以下示例创建一个 XmlReader 读取 XML 片段的对象。

string xmlFrag ="<item rk:ID='abc-23'>hammer</item> " +
                        "<item rk:ID='r2-435'>paint</item>" +
                        "<item rk:ID='abc-39'>saw</item>";

// Create the XmlNamespaceManager.
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("rk", "urn:store-items");

// Create the XmlParserContext.
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);

// Create the reader.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(new StringReader(xmlFrag), settings, context);
Dim xmlFrag As String = "<item rk:ID='abc-23'>hammer</item> " & _
                                     "<item rk:ID='r2-435'>paint</item>" & _
                                     "<item rk:ID='abc-39'>saw</item>"

' Create the XmlNamespaceManager.
Dim nt As New NameTable()
Dim nsmgr As New XmlNamespaceManager(nt)
nsmgr.AddNamespace("rk", "urn:store-items")

' Create the XmlParserContext.
Dim context As New XmlParserContext(Nothing, nsmgr, Nothing, XmlSpace.None)

' Create the reader. 
Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
Dim reader As XmlReader = XmlReader.Create(New StringReader(xmlFrag), settings, context)

注解

默认情况下,该方法 Create 创建的 XML 读取器满足以下符合性要求:

  • 根据 W3C XML 1.0 建议规范化新行和属性值。

  • 所有实体都会自动展开。

  • 即使读取器未验证,文档类型定义中声明的默认属性也会始终添加。

  • 允许将映射到正确 XML 命名空间 URI 的 XML 前缀声明。

  • 单个 NotationType 属性声明和 NmTokens 单个 Enumeration 属性声明中的表示法名称是不同的。

可以使用 ConformanceLevel 该属性检查和保证正在读取的流符合格式正确的 XML 1.0 文档或文档片段的规则。 如果数据不符合, XmlException 则会引发异常。 默认值为 ConformanceLevel.Document (文档级一致性) 。

三个一致性级别为:

设置 说明
Document 确保 XML 数据符合格式正确的 XML 1.0 文档的规则。 此级别的检查可确保任何处理器都可以使用正在读取的流作为 格式正确的 XML 1.0 文档

读取器检查下列事项:

- 顶级项不得具有 XML 声明、文档类型定义 (DTD) 、元素、注释、空白或处理指令以外的任何节点。
- XML 数据必须只有一个顶级元素节点。
Fragment 确保 XML 数据符合格式正确的 XML 1.0 文档片段的规则。

此设置接受包含多个根元素的 XML 数据或位于顶级的文本节点。 此级别的检查可确保任何处理器都可以使用作为 外部分析实体读取的流。
Auto 指定读取器应根据传入数据确定一致性检查级别。

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

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

- 根级别的文本、CDATA 或实体引用节点。
- 根级别的多个元素。
- 根级别没有元素。

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

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

备注

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

下面是读取器根据属性设置 ConformanceLevel 处理特定一致性冲突的方式:

条件 Document Fragment Auto
文本或类型化值显示在顶层。 XmlException 被引发。 未被视为此设置的冲突。 未被视为此设置的冲突。
多个元素或没有元素显示在顶层。 XmlException 被引发。 未被视为此设置的冲突。 未被视为此设置的冲突。
顶级项为空白。 未被视为此设置的冲突。 未被视为此设置的冲突。 未被视为此设置的冲突。
顶级项是 (识别为文本节点) 的属性。 XmlException 被引发。 未被视为此设置的冲突。 未被视为此设置的冲突。
发现多个连续的文本节点。 未被视为此设置的冲突。 未被视为此设置的冲突。 未被视为此设置的冲突。
同一命名空间前缀在同一本地范围内声明两次。 XmlException 被引发。 XmlException 被引发。 XmlException 被引发。
元素或属性中的命名空间在本地范围内不存在。 XmlException 被引发。 XmlException 被引发。 XmlException 被引发。
数据包含前缀命名空间不匹配。 XmlException 被引发。 XmlException 被引发。 XmlException 被引发。
xml:space 属性包含无效值。 XmlException 被引发。 XmlException 被引发。 XmlException 被引发。
遇到无效的名称。 XmlException 被引发。 XmlException 被引发。 XmlException 被引发。
前缀 xml 与 URI 不匹配 http://www.w3.org/XML/1998/namespace XmlException 被引发。 XmlException 被引发。 XmlException 被引发。

适用于

另请参阅