2010-02-05 5 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와 잘 작동합니다.

그러나 여러 사람 레코드를 소개하면 - 즉. 유효성 검사가 실패한 컬렉션 유효성 검사 오류 : 'Dataset'요소에 잘못된 자식 요소 'Person'이 있습니다. 0 0

내 XSD를 어떻게 수정할 수 있습니까?

+1

당신이 XML 또는 코드를 게시하면 ** 편집기 창에서 항상 해당 행을 강조 표시하고 편집기 도구 모음 (왼쪽에서 다섯 번째)에있는 "코드"버튼 (101 010)을 사용하여 해당 행을 코드/XML. 그렇다면 그들은 단지 멋지게 나타나고 구문이 강조 표시됩니다. –

답변

1

예, 귀하의 XSD는 데이터 세트 내에 정확하게 하나의 요소 Person의 시퀀스를 정의합니다. ,

<xs:element name="Person"> 

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

minOccurs없는 경우 maxOccurs 값 주어진 그들은 1로 기본 설정 - 그래서 당신은 얻을 :

당신은 쉽게 XSD에서이 줄을 변경하여이 있음을 변경할 수 있습니다 최소 및 최대 하나만 데이터 세트 안에 Person입니다.

이러한 값을 사용자에게 의미있는 것으로 변경하십시오. 예 : , maxOccurs="10" 또는 임의 수 (제한 없음)에 대해 maxOccurs="unbounded"을 사용하십시오.

관련 문제