我正在使用xsd进行xml验证。我需要用两种类型描述一个元素。
<xsd:choice>
<xsd:element name="num" minOccurs="1" type="xsd:integer" fixed="0"/>
<xsd:element name="num" minOccurs="1" type="xsd:positiveInteger"/>
</xsd:choice>
当我使用num = 0验证xml验证成功时,但是当我使用num value = 1或更高版本验证xml时,验证失败并出现错误。如何描述这个案例是否正确?
答案 0 :(得分:6)
我会在这个用例中使用xs:nonNegativeInteger:
<xs:element name="num" type="xs:nonNegativeInteger">
如果您希望元素支持多种类型,可以使用union:
<xs:element name="num" default="0">
<xs:simpleType>
<xs:union memberTypes="xs:integer xs:positiveInteger" />
</xs:simpleType>
</xs:element>
答案 1 :(得分:3)
您不能在同一复杂类型中使用相同名称和不同类型的两个元素粒子(如果要查找,此规则称为“元素声明一致”)。部分原因是XSD不仅用于验证,还用于数据输入,例如,在Java数据绑定中。
但我认为你在寻找的是工会类型。