我一直在尝试验证具有以下内容的XML语法:
<Parent>
<OptionalChild1/>
<OptionalChild2/>
<OptionalChild3/>
<RepeatedChild/>
<RepeatedChild/>
<RepeatedChild/>
</Parent>
换句话说,有几个元素可能丢失或存在一次(OptionalChild1,2,3)和另一个可能丢失或存在一次或多次的元素。
所有子元素都应该能够以任何顺序出现。 (除非:如果它有助于使XSD更有可能,我们可以强制执行RepeatedChild元素在可选的元素之后)。
我看不到任何XSD架构来验证这一点。 xsd:all
适用于第一组,第二组可能xsd:choice
,但我无法找到在父母中执行这两条规则的组合。
答案 0 :(得分:2)
您可以附加元素声明的最小和最大绑定。
例如,在您的父元素声明中,包含以下内容:
<xsd:sequence>
<xsd:element name="OptionalChild1" minOccurs="0" />
<xsd:element name="OptionalChild2" minOccurs="0" />
<xsd:element name="OptionalChild3" minOccurs="0" />
<xsd:element name="RepeatedChild" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
注意:我现在无法访问架构验证程序,但这大概就是您想要的。