如何根据XSD1.0中另一个标签的值制作标签必需或可选

时间:2016-08-11 09:46:31

标签: xml xsd switch-statement assert

我目前有以下XSD。

 <xsd:element name="ProcessingCode" minOccurs="0" maxOccurs="1">
          <xsd:simpleType>
            <xsd:restriction base="xsd:string">
              <xsd:enumeration value="000000" />
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:element>
<xsd:element name="CardExpirationDate" minOccurs="0" maxOccurs="1">
          <xsd:simpleType>
            <xsd:restriction base="xsd:integer">
              <xsd:pattern value="\d{4}" />
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:element>

现在,只有当ProcessingCode值为999999时,我才需要将CardExpirationDate设为Mandatory,否则将其保留为可选。请建议。

1 个答案:

答案 0 :(得分:1)

断言是一种XSD 1.1机制,所以你的帖子的[原始]标题谈到在XSD 1.0中使用断言没有多大意义。

如果你想在XSD 1.1中做这样的断言,那么断言就会继续处理ProcessingCode和CardExpirationDate的共同祖先元素。如果我们假设这些是兄弟元素,则公共父元素将具有诸如

之类的断言
<xs:assert test="ProcessingCode != '999999' or exists(CardExpirationDate)"/>