我有一个架构如下:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="MyDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Leaf" />
<xs:complexType name = "Leaf" mixed="true">
<xs:attribute name="ID" type="xs:string" />
</xs:complexType>
<xs:element name="Frame" />
<xs:complexType name="Frame" mixed="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Leaf" type ="Leaf" nillable="true"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Frame" type="Frame" nillable="true"/>
</xs:sequence>
<xs:attribute name="ID" type="xs:string" />
</xs:complexType>
<xs:element name="Document">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="Version" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="MetaData1" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="MetaData2" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="unbounded" name="Page" nillable="false">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Frame" type="Frame" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
基本上它是一个递归结构。一个文档可以有一个页面列表。它必须包含至少 1 页。页面由框架列表组成。Frame 可以有子帧或叶子(即不能包含子帧)。MetaData1 和 MetaData2 是可选的,可以出现在任何地方。
示例 XML 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Document>
<Version>1.1</Version>
<MetaData1>Somemetadata</MetaData1>
<Page>Page1
<Frame ID="1">Frame1
<Frame ID="2">SubFrame1
<Frame ID="3">SubFrame2
<Leaf ID="1">Alone</Leaf>
</Frame>
<Leaf ID="2">Alone2</Leaf>
</Frame>
</Frame>
<Frame ID="3">SubFrame3
</Frame>
</Page>
<MetaData2 />
</Document>
我正在使用 XmlReaderSettings 和 XmlSchemaSet 对架构进行 XML 验证。出于某种原因,我收到以下 2 个错误:
1){“元素'文档'具有无效的子元素'Metadata2'。预期的可能元素列表:'Page'。”}
我认为这是因为它是按顺序阅读的,而在我的情况下,这些元素可以按任何顺序出现。我尝试使用 xs:all 属性,但它不适用于 maxoccurs=unbounded。还有什么办法吗?
2) {“元素‘框架’的子元素‘叶子’无效。预期的可能元素列表:‘框架’。”}
这可能与 (1) 相同吗?Leaf ID=2 发生错误
任何帮助,将不胜感激。谢谢