我有一个类似于下面的XML。我想要条件检查。即
-
当
<datatype>
为int时,<subelement>
应为强制值。 -
当
<datatype>
为bool时,<subelemnt>
为可选。
注意:我使用的是xml 1.0。
这是允许的:
<element>
<name>
abc
</name>
<datatype>
int
</datatype>
<subelement>
</subelement>
</element>
这是允许的:
<element>
<name>
abc
</name>
<datatype>
bool
</datatype>
<subelement>
</subelement>
</element>
这是不允许的:
<element>
<name>
abc
</name>
<datatype>
int
</datatype>
</element>
这是基本的xsd
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="element">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="datatype"/>
<xs:element type="xs:string" name="subelement"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
有可能做到吗?如果有一个例子就太好了。谢谢你抽出时间。
这需要XSD 1.1,带有断言:
<xs:assert test="if (normalize-space(datatype)='int')
then exists(subelement)
else true()"/>
XSD 1.0不可能做到这一点。