如何强制子元素在XSD中具有值?

时间:2016-03-25 09:32:43

标签: xml xsd xsd-validation xml-validation

我在段Type中有一个名为Order的段的XML(作为示例)。该段是一对多的,所以我们有类似的东西:

<Order>
  <Type>1</Type>
  <Type>2</Type>
  <Type>3</Type>
</Order>

现在验证应该是,Type段中应始终存在值{1}的段Order,否则,应发生验证错误。我尝试了一些验证,但无法得到正确的结果。有人想过如何实现这个,如果可能的话?

2 个答案:

答案 0 :(得分:2)

XSD 1.0

您的约束无法在XSD 1.0中表示。

XSD 1.1

您的约束可以在XSD 1.1中表达,使用断言声明至少有一个Type Order子项的值为{{1} }:

1

答案 1 :(得分:1)

XSD 1.1 中,您可以使用xs:assert元素:

<xs:element name="Order">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:element name="Type" type="xs:string"/>

        </xs:sequence>
        <xs:assert test="count(Type[text() = '1']) > 0"/>
    </xs:complexType>

</xs:element>