我需要做的是验证这段xml:
<token type="email">qwqe12e12e1</token>
<token type="mobile">12e12313121w</token>
我知道如何使用属性和内容验证此元素,但我的问题是如何防止类型的标记,例如电子邮件不止一次出现?我需要两个令牌,但每个令牌只能出现一次。
答案 0 :(得分:0)
<xsd:unique>
元素是你的朋友。
答案 1 :(得分:0)
给出以下XML示例:
<tokens>
<token type="email">qwqe12e12e1</token>
<token type="mobile">12e12313121w</token>
<token type="mobile">1234</token>
</tokens>
以及以下XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="tokens">
<xs:complexType>
<xs:sequence>
<xs:element ref="token" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- token[type] to only occur once -->
<xs:unique name="type">
<xs:selector xpath="token" />
<xs:field xpath="@type" />
</xs:unique>
</xs:element>
<xs:element name="token">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="email"/>
<xs:enumeration value="mobile"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
验证将在第二个“移动”令牌类型上失败。
当从输入XML中删除第二个“移动”令牌类型时,验证将成功。