我正在尝试编写一个包含必需元素的复杂类型模式,但是按任意顺序。我的复杂类型如下所示:
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element name="link" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
<xs:element name="Plan" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
</xs:choice>
如果我只输入两个元素中的一个(虽然它不应该有效),xml文件将是有效的:
<link>123<link/>
或
<Plan>222<Plan/>
有效,而我只希望以下内容有效:
<link>123<link/>
<Plan>222<Plan/>
或
<Plan>222<Plan/>
<link>123<link/>
你可以帮帮我吗?谢谢
答案 0 :(得分:0)
<xs:choice minOccurs="0" maxOccurs="1">
<xs:sequence>
<xs:element name="link" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
<xs:element name="Plan" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:sequence>
<xs:element name="Plan" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
<xs:element name="link" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:choice>
可以解决问题,但如果这只是伪示例代码,请尝试使用<xs:group>
和<xs:choice>
答案 1 :(得分:0)
如果每个元素最多可以出现一次,请使用xs:all:
<xs:all>
<xs:element name="link" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
<xs:element name="Plan" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
</xs:all>
使用XSD 1.1,当元素可以重复时也可以使用。