我有一个架构如下:XML验证错误使用的XmlSchemaSet
<?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页。页面由帧列表组成。帧可以具有子帧或叶子(即不能包含子帧)。 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’可能元素的预期列表:‘页’”}
我认为它因为它是按顺序阅读的,而在我的情况下,这些元素可以以任何顺序出现。我尝试了xs:all属性,但它不能与maxoccurs = unbounded一起使用。任何其他方式?
2){“元素‘帧’具有无效的子元素‘叶’可能元素的列表预期:‘帧’。”}
这会是相同(1)?错误发生叶ID = 2
任何帮助,将不胜感激。谢谢
它仍然给出{“元素'框架'具有无效的子元素'叶'。列表中可能出现的元素:'Frame'。“}错误与您的模式有关。 请参阅我的原始XML,您缺少Leaf ID =”2“节点 –
@FrankQ。,请参阅更新后的内容:应该是Frame或Leaf的无限选择我已经修复了 –
谢谢你的工作!最后一件事,你如何强制Frame或Leaf必须包含Text值?如果我没有指定Text –