我想在我自己的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>
答案 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>
按要求。