7

我有一个简单的模式,我将 minOccurs 和 maxOccurs 都声明为 1。当我运行 XSD.exe 生成 C# 类并在代码中使用该类时;该字段不强制执行。是否缺少一些额外的步骤?还是使用 XSD.exe 生成的类不是必填字段?

任何建议或见解都会有所帮助。

4

3 回答 3

8

就像 Visual Studio 中的 Xml / infer 架构工具一样,每当我使用 XSD.exe 时,我最终都会修复一些生成的代码。XSD.exe 做了一个很好的近似,但它并不完全有效。

minOccurs / maxOccurs 'bug'记录在MSDN 上。

从 XML Schema 文档生成源代码时,Xsd.exe 忽略应用于 <choice>、<sequence>、<group>、<all> 和 <any> 元素的 minOccurs 属性。

对于元素,如果 maxOccurs 属性的值大于 1 或无界,Xsd.exe 将忽略 minOccurs 属性。在这种情况下,该工具会生成与 XSD 数据类型对应的类型的数组。Xsd.exe 使用 maxOccurs 属性的值来确定是生成单个实例还是数组。

对于元素,如果将 minOccurs 属性应用于转换为 .NET Framework 引用类型的架构数据类型,Xsd.exe 也会忽略该属性。

只有当以下所有条件都为真时,Xsd.exe 才会使用 minOccurs 属性的值:

涉及元素。

maxOccurs 属性指示单个实例。

数据类型转换为值类型。

于 2010-05-03T14:12:14.113 回答
1

您将如何在代码中强制执行任意次要事件?某种断言?我猜您只能映射到“不可为空的单个实例”(1:1)不可为空的数组(1:many)及其可空的等价物(0;1)和(0:many)

于 2010-05-03T14:46:03.960 回答
0

你是正确的 XSD.EXE 不强制发生要求。这是设计的。

于 2010-05-03T14:02:15.553 回答