基于父元素的XML XSD验证?

时间:2018-07-31 16:21:57

标签: xml xsd xsd-validation xml-validation

是否可以“有条件”验证XSD文件中的XML节点?也就是说,是否根据父节点名称进行验证?

例如:

<?xml version="1.0"?>
<rootNode>
  <parentA>
    <value>Some text</value>
  </parentA>
  <parentB>
    <value>Some text</value>
  </parentB>  
</rootNode>

value中使用的parentA的验证如下:

<xs:element name="value">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:maxLength value="10"/>
      <xs:minLength value="0"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

value中使用的parentB的验证会有所不同:

<xs:element name="value">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:maxLength value="4"/>
      <xs:minLength value="0"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

1 个答案:

答案 0 :(得分:3)

是的,即使在XSD 1.0中,本地声明的元素的类型也可以根据父元素提供的上下文而有所不同:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="rootNode">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ParentA">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="value">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:maxLength value="10"/>
                    <xs:minLength value="0"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="ParentB">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="value">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:maxLength value="4"/>
                    <xs:minLength value="0"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

value中的ParentA元素与value中的ParentB元素具有不同的类型。