【发布时间】:2010-09-28 16:28:00
【问题描述】:
目前我在从具有重复元素的 xsd 生成类文件时遇到问题。我在 VS2005 SP1 中使用自定义工具“MsDatasetGenerator”,从 xsd 为 c# 创建一个类型化的数据集。我正在尝试通过此架构解析 xml
<?xml version="1.0" encoding=\"utf-8\"?>
<xs:schema id="XSDobject" targetNamespace="http://tempuri.org/XSDobject.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XSDobject.xsd" xmlns:mstns="http://tempuri.org/XSDobject.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name="contact">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="phone" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="buyer">
<xs:complexType>
<xs:sequence>
<xs:element name="contact">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="phone" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但我收到以下错误“同一张表'contact'不能是两个嵌套关系中的子表。”
XSD 可以正确编译,但它是无法处理重复表的类型化数据集。现在我也测试了 xsd.exe 工具,但它似乎生成与 msdatasetgenerator 相同的代码。我还尝试了一些第三方代码生成器工具,例如 XSD2Code、CodeXS、AltovaXmlSpy,但我无法让它与嵌套元素一起使用。
另外,我可以在输入和输出处使用 xslt 转换来解决问题,但这会降低我的性能。
所以现在我问是否有人可以帮助我为 VS2005 提供一个好的解决方案,或者知道可以处理这个问题的好的 xsd 类生成器。如果它作为数组或列表工作,它不一定是类型化的数据集,只要它易于序列化和反序列化,它也是完美的。
提前致谢 弗雷格尔
【问题讨论】: