0

已经在这里和那里问了几次,一些答案与旧的 VS 版本有关(这是使用 VS 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 工具)并尝试实例化它时,我收到此错误:

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

我该如何克服这个问题?(真正的xsd更复杂,还有很多“相关相似”的孩子......

我想在我的应用程序中使用类型化数据集(易于读取和解析 xml)中的 xml 数据。我可以轻松地将表和列绑定到其他控件...(网格)

4

2 回答 2

2

Microsoft 的 XML 解析器不支持这一点:我认为它自 VS 的早期版本以来没有改变。

在此处查看有关如何操作的一些提示:http: //social.msdn.microsoft.com/Forums/en-US/22f98352-83b9-4638-a306-34a36a11e4d6/the-same-table-choice-cannot-be -两个嵌套关系中的子表

于 2013-07-29T14:56:33.600 回答
1

我已经发布了解决此问题的方法。显然,它可能不是每个人的解决方案,但至少它解释了问题的根源,并指出了有问题的代码。

使用 WriteXML 方法时的序列化问题

此外,您应该在架构中使用“嵌套”,这将解决问题。

我在调整你的架构时遇到了问题,所以你必须自己尝试,但我已经调整了我自己的一个。这是一个包含两个表的 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>

于 2015-04-08T15:18:32.317 回答