xsd.exe在xsd文件中的数据集中创建无效约束

时间:2009-12-08 14:00:56

标签: c# xml dataset xsd.exe

我的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>

1 个答案:

答案 0 :(得分:2)

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

  

发生定义精度的损失   当Xsd.exe忽略minOccurs时   在属性的情况下   maxOccurs属性值指示一个   数组绑定。反向翻译   从生成的数组到新的    声明产生的不是   原始minOccurs值但值   0,加上maxOccurs值   无界的。