2012-06-22 83 views
7

我有一個xml和xsd文件,都驗證正確(在http://xsdvalidation.utilities-online.info/測試)。

但是,xml不針對xsd進行驗證。我認爲這是因爲與xml相比,我錯誤地將complexType元素嵌套在xsd中。的people外部因素似乎會造成問題...

這裏是XML:
如何在xsd中嵌套complexType元素?

<?xml version = "1.0"?> 

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

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

...這裏是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> 

回答

10

maxoccurs="unbounded"添加到名爲「person」的元素。它是一個或多個人物元素的序列。

+0

嘿,你是對的,忽略我的回答:-) –

+0

啊,這是一個簡單的解決方案,感謝您的! –

2

試試這個你XSD:

<?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

順便說一句,我已經添加了一些示例限制某些元素的出現次數,但當然這些可以根據您的要求進行更改或省略。 –

+0

這是一個有趣的解決方案@JonoB ...這總是一個更好的做法,添加一個限制作爲一個元素的屬性,而不是使用' ...'標籤? –