我有一个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'。
答案 0 :(得分:1)
你误解了这条消息。它不表示el3
不能成为class
的孩子。它说el3
在解析过程中遇到它时无效。
换句话说,如上所述,
元素&#39;类&#39;有无效的子元素&#39; el3&#39;。
是对的。
另一方面,您解释信息的方式,
元素&#39;类&#39;永远不会有子元素&#39; el3&#39;。
确实是不正确的。但是,由于它实际上并没有这么说,因此诊断信息就可以了。