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



我使用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调试器导航类,但我找不到这些值的正确属性。

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

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

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

您应该尝试使用WriteXmlSchema写出模式,并将其与您读取的模式进行比较。

最新更新