如何使用XmlSchema实例找到MinOccurs / MaxOccurs值?

时间:2011-07-11 23:27:01

标签: c# .net xml dataset xsd

我使用DataSet.ReadXmlSchema()构建数据集,使用DataSet.ReadXml()来加载数据。

然后我绑定到数据集以编辑数据。我想基于我的模式中定义的minOccurs和maxOccurs属性来控制数据集中表中行的插入和删除。

我尝试将下面的架构加载到XmlSchema的实例中,例如MYSCHEMA。鉴于minOccurs和maxOccurs默认为1,除非另有说明,LastNameFirstName节点应该只出现一次。 Contacts可以发生0或1次,ContactName可以发生0到10次。

创建XmlSchema实例后,如何引用节点的minOccurs和maxOccurs属性?

我发现XmlSchemaParticle类包含MinOccurs和MaxOccurs属性,但我无法弄清楚如何浏览XmlSchema实例来查找它们。

我试过看MySchema.Items,但似乎没有包含这些信息。

这甚至是“最好的”方法吗?任何建议都将不胜感激。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Person.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Person">
    <xs:complexType>
      <xs:sequence>
        <!--Required Nodes-->
        <xs:element name="LastName" type="xs:string"/>
        <xs:element name="FirstName" type="xs:string"/>
        <!-- Optional Nodes-->
        <xs:element name="Contacts" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ContactName" minOccurs="0" maxOccurs="10">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string"/>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

有谁知道如何从XmlSchema实例中找到MinOccurs / MaxOccurs值?我已经阅读了MSDN上的文档,并尝试通过Visual Studio调试器导航该类,但我找不到这些值的正确属性。

1 个答案:

答案 0 :(得分:1)

我认为DataSet不会尊重minOccurs / maxOccurs。

实际上,DataSet没有将一对一映射到XML Schema。 DataSet类映射到关系数据库模型。 XML模式中未映射到该模型的任何内容都将被DataSet忽略或转换。

一个例子是我的元素与两个不同父元素的子元素相同的复杂类型。我能够将该模式读入DataSet,但DataSet实际上创建了我的共享复杂类型的副本,以匹配Relational模型。我写回来的XML模式与我读过的模式不匹配。

您应该尝试使用WriteXmlSchema写出架构,并将其与您阅读的架构进行比较。