XmlReaderSettings.ConformanceLevel 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置 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
属性值
指定一致性级别(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 被引发。 |