1

我的 xsd 中有一个允许的最小长度为零的序列。当我尝试将不包含任何序列元素的 xml 文件加载到 xsd.exe 创建的 DataSet 中时,我收到一个异常,表明我的文件违反了 DataSet 的约束之一。xml 文件根据架构进行验证,所以我知道它是有效的。我可以做些什么来使该工具生成有效的数据集?

<xs:sequence minOccurs="0" maxOccurs="unbounded">
    <xs:element name="Numbers" type="xs:double"/>
</xs:sequence>

编辑:如果我将架构更改为此生成的代码可以正常工作。不过,这对我来说似乎是错误的,因为它似乎暗示我可以拥有其中没有任何内容的序列项目,这没有任何意义。

<xs:sequence minOccurs="0" maxOccurs="unbounded">
    <xs:element name="Numbers" type="xs:double" minOccurs="0"/>
</xs:sequence>
4

1 回答 1

2

这听起来像是因为 xsd.exe 处理 minOccurs 和 maxOccurs 的方式。 这篇 MSDN 文章描述了 xsd.exe 处理 minOccurs / maxOccurs 的方式。那篇文章的这一部分似乎与您最初的问题相符:

如果 Xsd.exe 在 maxOccurs 属性值指示数组绑定的情况下忽略 minOccurs 属性,则会丢失定义精度。从生成的数组到新声明的反向转换生成的不是原始 minOccurs 值,而是 0 值,加上无界的 maxOccurs 值。

于 2010-05-03T14:23:34.843 回答