fre*_*gel 5 c# xml xsd .net-2.0
目前我遇到了从具有重复元素的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>
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误" 同一个表'联系'不能是两个嵌套关系中的子表."
XSD正确编译,但它是无法处理重复表的类型化数据集.现在我也测试了xsd.exe工具,但它似乎生成与msdatasetgenerator相同的代码.我还尝试了一些第三方代码生成器工具,如XSD2Code,CodeXS,AltovaXmlSpy,但我也无法使用嵌套元素.
或者,我可以在输入和输出处解决xslt转换的问题但是它会花费我很多性能.
所以现在我问是否有人可以帮助我为VS2005提供一个好的解决方案,或者知道可以解决这个问题的好的xsd类生成器.它不必是类型化的数据集,如果它作为数组或列表工作,它也是完美的,只要它很容易序列化和反序列化.
在此先感谢Freggel
我建议对模式项进行简单的重命名,并使用分组(如下所示)或 xsd 包含(如果您需要这种复杂类型用于其他模式)。如果您对名称没有硬性要求,这应该可以解决问题。
根据经验,我认为工具可能无法处理您示例中的重复命名。
像这样的事情可能会起作用:
<?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:group name="Contact">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="phone" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderContact">
<xs:complexType>
<xs:sequence>
<xs:group ref="Contact"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="buyer">
<xs:complexType>
<xs:sequence>
<xs:element name="BuyerContact">
<xs:complexType>
<xs:sequence>
<xs:group ref="Contact"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7907 次 |
| 最近记录: |