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

XSD skip validation of whole structure beneath a given node

我想在我自己的 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>

事实上,您的示例确实跳过了 parentField 元素下整个结构的验证,因为您将 xs:any@processContents="skip"[= 一起使用28=]假设parentField下只有一个child因为maxOccurs默认为1,并且假设parentField[=30=下没有混合文本].

对上述两项规定进行调整,

<?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>

根据要求。