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

XSD Validation Error when mandatory element is missing from sequence complex type

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

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

不正确的 XML 缺少一个元素。

当我使用 C# 根据 XSD 验证 XML 时,预期的错误是 "the 'XXX' element is expected"。但实际上,它也告诉我"the element has invalid child element"。我不知道该怎么办。

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

<!-- 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>

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

The element 'class' has invalid child element 'el3'. List of possible elements expected: 'el2'.

预期的错误是:

List of possible elements expected: 'el2'.

你误解了消息。 不是el3 永远不可能是 class 的 child。是说el3在解析过程中遇到的那个点是无效的

换句话说,如前所述,

The element 'class' has invalid child element 'el3'.

正确。

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

The element 'class' can never have child element 'el3'.

确实不正确。但是,由于它实际上并没有这么说,所以诊断消息没有问题。