XSD 功能的另一个挑战,
我的客户一直在发送 XML 文件,这些文件将具有 0 个或多个未定义或 [调用] 意外标签(可能出现在层次结构中)。好吧,它们对我来说是多余的标签..所以我必须忽略它们的存在,但与它们一起还有一些标签需要验证。
这是一个示例 XML:
<root>
<undefined_1>one</undefined_1>
<undefined_2>two</undefined_2>
<node>to_be_validated</node>
<undefined_3>two</undefined_3>
<undefined_4>two</undefined_4>
</root>
我试过的 XSD:
<xs:element name="root" type="root"></xs:element>
<xs:complexType name="root">
<xs:sequence>
<xs:any maxOccurs="2" minOccurs="0"/>
<xs:element name="node" type="xs:string"/>
<xs:any maxOccurs="2" minOccurs="0"/>
</xs:sequence>
</xs:complexType
由于某些原因,XSD 不允许这样做。
上面提到的例子只是一个例子。实用的 XML 带有复杂的 XML 标签层次..
如果你能破解它,请告诉我。
顺便说一句,替代解决方案是在验证过程之前插入 XSL 转换。好吧,我正在避免它,因为我需要更改触发验证过程的 .Net 代码,这至少得到了我公司的支持。
最佳答案
如果您还没有完成此操作,您可以尝试以下操作:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root" type="root"></xs:element>
<xs:complexType name="root">
<xs:sequence>
<xs:any maxOccurs="2" minOccurs="0" processContents="skip"/>
<xs:element name="node" type="xs:string"/>
<xs:any maxOccurs="2" minOccurs="0" processContents="skip"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
在 Linux 下,使用 libxml 版本 20706 的 xmllint 可以正常工作。
关于xml - 如何忽略未知标签的验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402452/