c# - 序列复杂类型中缺少必需元素时的 XSD 验证错误

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

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

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

不正确的 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>

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

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'.

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

关于c# - 序列复杂类型中缺少必需元素时的 XSD 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38195461/

相关文章:

c# - 找不到路径的一部分 C#

c# - 如何从 dapper 返回 "Select * from table"的 Task<List<Model>> ,而不必再次查询第一个查询的结果 id?

c - 如何在Linux平台上使用C动态生成XML文件?

c# - 当 .NET 反射器显示它已在 .NET Framework 中完成时,为什么我不能将属性或索引器作为 ref 参数传递?

sql-server - 从根元素 xml 获取值到列

xml - XSD 只允许属性依赖于其他属性值

javascript - QuickBooks CustomerAdd 请求因 xml 格式错误而失败?

.net - 在 .net 中使用 xsd 生成 XML

用于询问 XSD 文件的 Java 方法

c# - 处理长时间运行的 WCF [OperationContract(IsOneWay = true)]