XSD跳过给定节点下的整个结构的验证

时间:2016-05-25 09:35:40

标签: xml xsd xsd-validation xml-validation

我想在我自己的XML中包含一些通用和未知的XML内容。 因此,我想跳过XML文件中特定节点的验证。

我正在尝试使用以下XSD将我的节点parentField下的所有内容从验证中删除。但它似乎只是跳过我的XML子树的第一级作为parentField的一部分。是否有任何解决方案可以将通用XML作为您自己的XML的一部分使用xs:any或建议的其他黑客,例如将其粘贴为CDATA?

<xs:complexType name="MyType" final="">
  <xs:all minOccurs="0">
    <xs:element name="parentField">
      <xs:complexType>
        <xs:sequence>
          <xs:any minOccurs="0" processContents="skip"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:all>
</xs:complexType>

1 个答案:

答案 0 :(得分:1)

事实上,您的示例会跳过parentField元素下的整个结构的验证,因为您使用xs:any @processContents="skip" 只提供parentField以下maxOccurs下的单个孩子默认为1,并且parentField 下没有混合文字。

为上述两项条款作出调整,

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="r" type="MyType"/>
  <xs:complexType name="MyType" final="">
    <xs:all minOccurs="0">
      <xs:element name="parentField">
        <xs:complexType mixed="true">
          <xs:sequence>
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
</xs:schema>

将更完全允许parentField

下的任意标记
<?xml version="1.0" encoding="UTF-8"?>
<r>
  <parentField>
    <v/>
    All
    <x>
      of this
      <y>
        content
        <z>is now allowed</z>
        under parentField.
      </y>
    </x>
  </parentField>
</r>

按要求。