同一个表'name'不能是两个嵌套关系中的子表

时间:2013-07-29 13:50:53

标签: c# xml xsd

已经有好几次在这里和那里问过,一些答案与旧的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)。 我可以轻松地将表和列绑定到其他控件...(网格)

2 个答案:

答案 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>