当序列复杂类型中缺少必需元素时,XSD验证错误

时间:2016-07-05 04:59:52

标签: c# xml xsd xsd-validation xml-validation

我有一个XSD和不正确的XML。

XSD具有复杂类型,具有序列元素。所有这些元素都是强制性。 (XSD由第三方维护,不能更改)

错误的XML缺少一个元素。

当我使用C#针对XSD验证XML时,预期的错误是“预期'XXX'元素”。但实际上,它还告诉我“元素具有无效的子元素”。我不知道该怎么做。

为了帮助您理解我的问题,我将向您展示一个例子:

<!-- Incorrect XML -->
<class>
  <el1>222</el1>
  <el3>222</el3>
</class>

<!-- XSD -->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="class">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:short" name="el1" />
        <xs:element type="xs:short" name="el2" />
        <xs:element type="xs:short" name="el3"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

真实但意外的验证错误如下所示:

  

元素'class'具有无效的子元素'el3'。预期可能元素列表:'el2'。

预期的错误是:

  

预期可能元素列表:'el2'。

1 个答案:

答案 0 :(得分:1)

你误解了这条消息。它表示el3不能成为class的孩子。它说el3 在解析过程中遇到它时无效。

换句话说,如上所述,

  

元素&#39;类&#39;有无效的子元素&#39; el3&#39;。

是对的。

另一方面,您解释信息的方式,

  

元素&#39;类&#39;永远不会有子元素&#39; el3&#39;。

确实是不正确的。但是,由于它实际上并没有这么说,因此诊断信息就可以了。