如何使用XSD检查XML是否缺少元素

时间:2011-06-29 11:55:09

标签: xsd linq-to-xml xml-validation minoccurs

XSD文件中minOccurs的{​​{1}}属性的默认值为1 (source)

考虑您有一个XSD指定包含2个元素的复杂类型:<element><el1> 如果您提供的<el2>仅包含XDocument,则<el2>将无法验证 相反,你会收到消息:

The element Message in namespace ___ has invalid child element el2 in namespace ___.
List of possible elements expected: el1

这基本上是XDocument上的一个错误,其中人们会认为复杂类型上的错误不包含<el2>

我的问题是: 有没有办法检查所有<el1> - 标签是否有<element>&gt; 0是否存在?
我想说在使用XSD验证XML时这是一个非常基本的检查。

1 个答案:

答案 0 :(得分:2)

根据您定义架构的方式,元素的外观顺序很重要。

在这种情况下,验证器期望&lt; el1&gt;但正在看到元素&lt; el2&gt;所以错误是&lt; el2&gt;出现在不应该的地方。我相信这意味着在定义复杂类型时使用了“序列”。所以你得到的错误是正确的。

如果这仍然困扰你,并且元素的顺序与解析无关,请使用“all”而不是“sequence”,这将不会强制执行顺序。然后验证者应该提示您所需的元素&lt; el1&gt;不见了。它看起来应该如下所示:

<xsd:complexType name="MyType">
  <xsd:all>
    <xsd:element name="el1" minOccurs="1"/>
    <xsd:element name="el2" minOccurs="1"/>
  </xsd:all>
</xsd:complexType>

我希望这会有所帮助。