2010-02-05 100 views
2

我有一个提供的XSD。我不太了解XSD开始修改它。C#XMLReader - 多个子集合失败通过XSD架构验证

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Dataset"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Person"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="PayrollNumber" type="String16" maxOccurs="1" minOccurs="1" /> 
       <xs:element name="Surname" type="String50" maxOccurs="1" /> 
       <xs:element name="Name" type="String50" maxOccurs="1" /> 
       <xs:element name="StreetAddress" type="String50" maxOccurs="1" /> 
       <xs:element name="Suburb" type="String20" maxOccurs="1" /> 
       <xs:element name="Skills"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element maxOccurs="unbounded" name="Skill" type="String16" /> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="HomePhone" type="String14" maxOccurs="1" /> 
       <xs:element name="MobilePhone" type="String14" maxOccurs="1" /> 
       <xs:element name="PagerNumber" type="String14" maxOccurs="1" /> 
       <xs:element name="Email" type="String80" maxOccurs="1" /> 
       <xs:element name="RecordType" type="RecordType" maxOccurs="1" minOccurs="1" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="String16"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="16" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="String50"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="50" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="String20"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="20" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="String30"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="30" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="String14"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="14" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="String80"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="80" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="RecordType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="A" /> 
     <xs:enumeration value="E" /> 
     <xs:enumeration value="D" /> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

我有以下XML。

<Dataset> 
    <Person> 
    <PayrollNumber>1234567</PayrollNumber> 
    <Surname>Denson</Surname> 
    <Name>John-Jaime-Winston Junior</Name> 
    <StreetAddress>Level 5, City Central Tower 2, 121 King William St</StreetAddress> 
    <Suburb>Mitcham</Suburb> 
    <Skills> 
     <Skill>Skill1</Skill> 
     <Skill>Skill2</Skill> 
    </Skills> 
    <HomePhone>08 8888 8888</HomePhone> 
    <MobilePhone>041 888 999</MobilePhone> 
    <PagerNumber>111111</PagerNumber> 
    <Email>[email protected]</Email> 
    <RecordType>A</RecordType> 
    </Person> 
</Dataset> 

NET文件验证器可以正常使用XMLReader。

但是,如果我介绍多个人的记录 - 即。验证失败的集合 验证错误:元素“数据集”具有无效的子元素“Person”。 0 0

如何修改我的XSD?

+1

如果您发布XML或代码,**总是**突出显示编辑器窗口中的这些行,并使用编辑器工具栏(左起第五个)上的“代码”按钮(101 010)将这些行格式化为代码/ XML。然后,只有这样,它们才能很好地显示出来,并且突出显示语法和所有! – 2010-02-05 06:37:57

回答

1

是的,您的XSD现在在数据集内定义了一个正好包含一个元素Person的序列。

你可以很容易地改变,通过改变这条线在你的XSD:

<xs:element name="Person"> 

<xs:element name="Person" minOccurs="1" maxOccurs="unbounded"> 

如果没有minOccursmaxOccurs值给出,则默认为1 - 让您得到一个在您的数据集中最少和最多只有一个Person

将这些值更改为对您有意义的内容,例如,maxOccurs="10"或使用maxOccurs="unbounded"进行任何次数的发生(无限制)。