我正在尝试创建一个架构并遇到了这个问题,虽然我找到了一个应该可行的解决方案(XSD - how to allow elements in any order any number of times?)但在我的情况下却没有。
<xsd:element name="foo">
<xsd:complexType>
<xsd:choice>
<xsd:element ref="p" maxOccurs="unbounded"/> *--element p is complex--*
<xsd:element ref="f" maxOccurs="unbounded"/> *--element f is complex--*
<xsd:element ref="summary"/>
</xsd:choice>
<xsd:attribute ref="type"/>
</xsd:complexType>
</xsd:element>
使用它来验证下面的xml会带回错误'Unexpected child element':
<foo type="###">
<p type="###">
<pr date="##/##/##" amount="###"/>
<pr date="##/##/##" amount="###"/>
</p>
<f type="###">
<fr date="##/##/##" factor="###"/>
<fr date="##/##/##" factor="###"/>
</f>
<p type="###">
<pr date="##/##/##" amount="###"/>
<pr date="##/##/##" amount="###"/>
</p>
<f type="###">
<fr date="##/##/##" factor="###"/>
<fr date="##/##/##" factor="###"/>
</f>
<summary>
<p_summary date="##/##/##" p="####" dis="###" ......./>
<p_summary date="##/##/##" p="####" dis="###" ......./>
<p_summary date="##/##/##" p="####" dis="###" ......./>
</summary>
</foo>
我没有列出p f和summary的定义,但它们的各个元素(fr,pr,p_summary)都包含maxOccurs =“unbounded”。
答案 0 :(得分:1)
&lt; xsd:choice&gt; 必须无界。您正确的架构应如下所示:
<xsd:element name="foo">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="p"/>
<xsd:element ref="f"/>
<xsd:element ref="summary"/>
</xsd:choice>
<xsd:attribute ref="type"/>
</xsd:complexType>
</xsd:element>
按每个元素maxOccurs="unbounded"
,p
,f
设置summary
这里不会有任何区别。它只允许你多次重复相同的元素,但不能与其他元素混合。