xml - 如何忽略未知标签的验证?

标签 xml xsd xsd-validation

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/

相关文章:

python - 导入错误 : No module named xml. dom.minidom

xml - 使用 XSD 仅允许 XML 标记中的特定字符串

xml - BizTalk::名称为 "X"且命名空间为 "Y"的开始元素是意外的

c# - 当可以是 XElement 或 XAttribute 时如何转换 XPathEvalute?

Python XML 到字典以迭代项目

.net - 如何合并来自不同 DomDocuments 的 XML

android - 如何为 id 属性设置 XSD 限制

xml - 限制在 XSD 断言中使用属性

xml - 如何将相同的属性多次添加到 XML 中的元素标记

c# - 元素 http ://www. w3.org/2001/XMLSchema:complexType 在此上下文中无效