我的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>
答案 0 :(得分:2)
这听起来像是因为xsd.exe处理minOccurs和maxOccurs的方式。 This MSDN article描述了xsd.exe处理minOccurs / maxOccurs的方式。该文章的这一部分似乎与您最初的问题相吻合:
发生定义精度的损失 当Xsd.exe忽略minOccurs时 在属性的情况下 maxOccurs属性值指示一个 数组绑定。反向翻译 从生成的数组到新的 声明产生的不是 原始minOccurs值但值 0,加上maxOccurs值 无界的。