0

XSD 文件中的minOccurs属性的默认值为 1 (source)。 假设您有一个 XSD 指定包含 2 个元素的复杂类型:和. 如果您提供仅包含,则不会验证。 相反,您会收到以下消息:<element>

<el1><el2>
XDocument<el2>XDocument

命名空间 ___ 中的元素 Message 在命名空间 ___ 中具有无效的子元素 el2。
预期的可能元素列表:el1

这基本上是一个错误<el2>,人们期望在复杂类型上出现错误,因为不包含<el1>.

我的问题是:
有没有办法检查所有> 0 的<element>标签minOccurs是否存在?
我会说这是使用 XSD 验证 XML 时非常基本的检查。

4

1 回答 1

2

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

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

如果这仍然困扰您,并且元素的顺序对您的解析无关紧要,请使用“all”而不是“sequence”,这不会强制执行顺序。然后,验证器应提示您缺少必需的元素 <el1>。它应该如下所示:

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

我希望这有帮助。

于 2011-06-29T12:20:17.033 回答