XML I&#m; m结构可以包含任意数量的" user"元素,我想确保一个名为"的属性是默认"在其中一个用户中设置为true。
例如,像这样的东西是有效的:
<users>
<user isDefault="false"/>
<user isDefault="true"/>
<user isDefault="false"/>
</users>
但是,这个:
<users>
<user isDefault="true"/>
<user isDefault="true"/>
<user isDefault="false"/>
</users>
而且:
<users>
<user isDefault="false"/>
<user isDefault="false"/>
<user isDefault="false"/>
</users>
无效。我可以使用XSD实现这一点,还是需要以编程方式验证它?
答案 0 :(得分:1)
解决此问题的一种简单方法是重新考虑XML并指定首先列出默认用户,并且首先列出的用户是默认用户。然后,对默认用户的更改涉及将该用户移动到列表顶部,而不是更改两个isDefault
值,并且无需进一步努力即可确保始终只有一个user
元素是第一个。
答案 1 :(得分:0)
如果必须始终存在isDefault
属性,则无法单独使用XSD 1.0来实现此目的。
使用XSD 1.1,您可以使用<xs:assert>
:
<xs:element name="users">
<xs:complexType>
<xs:sequence>
<xs:element ref="user" maxOccurs="unbounded"/>
</xs:sequence>
<xs:assert test="count(user[@isDefault='true']) = 1"/>
</xs:complexType>
</xs:element>