【问题标题】:XSD Conditional Child Element based on Attribute基于属性的 XSD 条件子元素
【发布时间】:2016-05-02 09:08:44
【问题描述】:

我有一个 xml,它可以有 2 种类型的节点,如下所述:

类型 1:

<node attr1="false" attr2="attr2">
   <node attr1="true" attr2="attr2" attr3="attr3" attr4=""></node>
</node>

<node attr1="false" attr2="attr2">
 <node attr1="false" attr2="attr2">
  <node attr1="true" attr2="attr2" attr3="attr3" attr4="">
 </node>
 </node>
 <node attr1="true" attr2="attr2" attr3="attr3" attr4=""></node>

类型 2:

<node attr1="true" attr2="attr2" attr3="attr3" attr4=""></node>

如果attr1值为false,那么它会有子节点,没有attr3,attr4会有

如果attr1的值为真,那么它就没有任何子节点,并且attr3,attr4都会在那里。

【问题讨论】:

    标签: xsd-validation xsd-1.1


    【解决方案1】:

    您可以在 XSD 1.1 中使用断言来执行此操作,但我在 XSD 1.0 中看不到执行此操作的方法

    <?xml version="1.0" encoding="utf-8" ?>
    <!--Created with Liquid XML 2017 Developer Bundle Edition 15.0.0.0 (https://www.liquid-technologies.com)-->
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="node">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="node" minOccurs="0" maxOccurs="unbounded" />
                </xs:sequence>
                <xs:attribute name="attr1" type="xs:boolean" use="required" />
                <xs:attribute name="attr2" type="xs:string" use="required" />
                <xs:attribute name="attr3" type="xs:string" />
                <xs:attribute name="attr4" type="xs:string" />
                <xs:assert test="string(@attr1) = ('false', '0') or boolean(@attr3)" />
                <xs:assert test="string(@attr1) = ('false', '0') or boolean(@attr4)" />
                <xs:assert test="string(@attr1) = ('true', '1') or not(boolean(@attr3))" />
                <xs:assert test="string(@attr1) = ('true', '1') or not(boolean(@attr4))" />
            </xs:complexType>
        </xs:element>
    </xs:schema>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多