我使用DataSet.ReadXmlSchema()
构建数据集,使用DataSet.ReadXml()
来加载数据。
然后我绑定到数据集以编辑数据。我想基于我的模式中定义的minOccurs和maxOccurs属性来控制数据集中表中行的插入和删除。
我尝试将下面的架构加载到XmlSchema
的实例中,例如MYSCHEMA。鉴于minOccurs和maxOccurs默认为1,除非另有说明,LastName
和FirstName
节点应该只出现一次。 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调试器导航该类,但我找不到这些值的正确属性。
答案 0 :(得分:1)
我认为DataSet
不会尊重minOccurs / maxOccurs。
实际上,DataSet
没有将一对一映射到XML Schema。 DataSet
类映射到关系数据库模型。 XML模式中未映射到该模型的任何内容都将被DataSet
忽略或转换。
一个例子是我的元素与两个不同父元素的子元素相同的复杂类型。我能够将该模式读入DataSet
,但DataSet
实际上创建了我的共享复杂类型的副本,以匹配Relational模型。我写回来的XML模式与我读过的模式不匹配。
您应该尝试使用WriteXmlSchema
写出架构,并将其与您阅读的架构进行比较。