我有一个读取
的XML<Options>
<option1>Y</option1>
<option2>N</option2>
<option3>N</option3>
</Options>
我想确保只有一个子元素(Options)具有值Y,以便上面的XML有效但不是下面的。
<Options>
<option1>Y</option1>
<option2>Y</option2>
<option3>N</option3>
</Options>
我尝试了独特的参考完整性,但无法解决问题。
非常感谢任何帮助/想法。
答案 0 :(得分:1)
您必须在XSD 1.0之外强制实施此约束,但您可以使用xs:assert
强制执行 XSD 1.1 :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="Options">
<xs:complexType>
<xs:sequence>
<xs:element name="option1"/>
<xs:element name="option2"/>
<xs:element name="option3"/>
</xs:sequence>
<xs:assert test="count(* = 'Y') = 1"/>
</xs:complexType>
</xs:element>
</xs:schema>
或者,为避免单独命名每个option
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="Options">
<xs:complexType>
<xs:sequence>
<xs:element name="option" maxOccurs="unbounded" />
</xs:sequence>
<xs:assert test="count(option = 'Y') = 1"/>
</xs:complexType>
</xs:element>
</xs:schema>
如果需要,当然也可以将约束选项限制为Y
或N
。