2012-06-22 49 views
7

Tôi có tệp xml và xsd vừa hợp lệ hóa chính xác (được kiểm tra tại http://xsdvalidation.utilities-online.info/).

Tuy nhiên, xml không xác thực với xsd. Tôi nghĩ rằng điều này là do tôi đang lồng ghép các phần tử complexType không chính xác trong xsd, so với xml. Các yếu tố bên ngoài của people dường như được gây ra vấn đề ...

Đây là xml:
Làm thế nào để bạn lồng các phần tử complexType trong một xsd?

<?xml version = "1.0"?> 

<people> 
    <person> 
     <firstname>Joe</firstname> 
     <lastname>Schmoe</lastname> 
    </person> 

    <person> 
     <firstname>Cletus</firstname> 
     <lastname>Jenkins</lastname> 
    </person> 
</people> 

... và đây là xsd:

<?xml version = "1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name = "people"> 
     <xs:complexType> 
      <xs:sequence> 

       <xs:element name = "person"> 
        <xs:complexType> 
         <xs:sequence> 

          <xs:element name = "firstname" type = "xs:string" /> 
          <xs:element name = "lastname" type = "xs:string" /> 

         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 

      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

</xs:schema> 

Trả lời

10

Thêm maxoccurs="unbounded" vào phần tử có tên "người". Nó là một chuỗi các yếu tố một hoặc nhiều người.

+0

Hey, bạn nói đúng, bỏ qua câu trả lời của tôi :-) –

+0

Ah, đó là một giải pháp đơn giản, cảm ơn vì điều đó! –

2

Hãy thử điều này cho XSD của bạn:

<?xml version = "1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="people" type="people"/> 

    <xs:complexType name="people"> 
     <xs:sequence> 
      <xs:element name="person" type="person" maxOccurs="unbounded" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="person"> 
     <xs:sequence> 
      <xs:element name="firstname" type="xs:string" maxOccurs="1" minOccurs="1"/> 
      <xs:element name="lastname" type="xs:string" maxOccurs="1" minOccurs="1"/> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 
+0

Btw, tôi đã thêm một số hạn chế ví dụ về số lần xuất hiện của các phần tử nhất định, nhưng tất nhiên chúng có thể được thay đổi hoặc bỏ qua tùy thuộc vào yêu cầu của bạn. –

+0

Đó là một giải pháp thú vị @JonoB ... là cách tốt nhất để thêm hạn chế làm thuộc tính của một phần tử, thay vì sử dụng ' ... 'thẻ? –