我使用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调试器导航类,但我找不到这些值的正确属性。
我不认为DataSet
会尊重minOccurs/maxOccurs。
事实上,DataSet
并没有一对一地映射到XML Schema。DataSet
类映射到一个关系数据库模型。XML Schema中任何不映射到该模型的内容都将被DataSet
忽略或转换。
有一个例子,我有两个不同父元素的子元素具有相同的复杂类型。我能够将该模式读入DataSet
,但是DataSet
实际上创建了我的共享复杂类型的副本,以匹配关系模型。我写回来的XML模式与我读进来的模式不匹配。
您应该尝试使用WriteXmlSchema
写出模式,并将其与您读取的模式进行比较。