已经有好几次在这里和那里问过,一些答案与旧的VS版本有关(这是使用V.S. 2012)。
我再次提出问题:
给出xsd:
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="LocationType">
<xs:attribute name="X" type="xs:integer" />
<xs:attribute name="Y" type="xs:integer" />
</xs:complexType>
<xs:complexType name="AlphaNumericType">
<xs:sequence>
<xs:element name="AlphaNumericLocation" type="LocationType" />
</xs:sequence>
<xs:attribute name="id" type="xs:string" />
<xs:attribute name="key" type="xs:integer" />
</xs:complexType>
<xs:complexType name="BitmapType">
<xs:sequence>
<xs:element name="BitmapLocation" type="LocationType" />
<xs:element name="BitmapCaptions" type="AlphaNumericType" />
</xs:sequence>
<xs:attribute name="key" type="xs:string" />
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
<xs:complexType name="ArcType">
<xs:sequence>
<xs:element name="ArcLocation" type="LocationType" />
<xs:element name="ArcCaptions" type="AlphaNumericType" />
</xs:sequence>
<xs:attribute name="key" type="xs:string" />
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
<xs:element name="BitmapControls">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="Bitmap" type="BitmapType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ArcControls">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="Arc" type="ArcType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
注意 - AlphaNumeric有一个位置元素,位图和弧都有AlphaNumeric。
当我创建一个cs类(使用XSD工具)并尝试实例化它时,我收到此错误:
同一张表&#39; AlphaNumericLocation&#39;不能是两个孩子的桌子 嵌套关系。
我如何克服这个问题? (真正的xsd更复杂,还有更多&#34;相关类似的&#34;孩子......
我想在我的应用程序中使用类型化数据集中的xml数据(可以轻松读取和解析xml)。 我可以轻松地将表和列绑定到其他控件...(网格)
答案 0 :(得分:2)
微软的XML解析器不支持这一点:我认为自早期版本的VS以来它没有改变。
点击此处查看有关如何操作的一些提示:http://social.msdn.microsoft.com/Forums/en-US/22f98352-83b9-4638-a306-34a36a11e4d6/the-same-table-choice-cannot-be-the-child-table-in-two-nested-relations
答案 1 :(得分:1)
我已针对此问题发布了解决方法。 显然它可能不是每个人的解决方案, 但至少它解释了问题的根源,指出违规代码。
Serialization Issue when using WriteXML method
此外,您应该在架构中使用“嵌套”,这样可以解决问题。
我在修改你的架构时遇到了问题,所以你必须自己尝试,但我已经改编了自己的架构。它是一个包含两个表的DataSet,其中MyRootTable与'PremiumPerYear'具有嵌套关系。
此嵌套关系中的关键角色是<xs:choice element
。
它允许(我相信)模式引用自身的另一部分。
然后,'ref'关键字创建/使用此引用:
<xs:element ref="PremiumPerYear" />
注意:此示例没有实际的“双嵌套”关系,但这只是因为我删除了90kb的文本。
<DataSet>
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
<xs:element name="PremiumPerYear">
<xs:complexType>
<xs:sequence>
<xs:element name="BeforeTaxes" type="xs:decimal" minOccurs="0" />
<xs:element name="AfterTaxes" type="xs:decimal" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="PremiumPerYear" />
<xs:element name="MyRootTable">
<xs:complexType>
<xs:sequence>
<xs:element name="RequestType" msprop:KeyValueCategory="KindOfRequest" type="xs:string" minOccurs="0" />
<xs:element name="RequestDateTime" type="xs:dateTime" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
</DataSet>