2014-03-12 99 views
1

在我的XML文件我有兩個名稱相同的標籤,都稱之爲項目,我現在已經創建了一個XML架構這份文件,考慮到我有兩個標籤具有相同的名稱,我的XML模式是否準確?XML具有相同名稱的兩個標籤

XML文檔

<?xml version="1.0" encoding="UTF-8"?> 

<shiporder orderid="889923" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="shiporder.xsd"> 
    <orderperson>John Smith</orderperson> 
     <shipto> 
      <name>Ola Nordmann</name> 
      <address>Langgt 23</address> 
      <city>4000 Stavanger</city> 
      <country>Norway</country> 
     </shipto> 
     <item> <!--First Item Tag--> 
      <title>Empire Burlesque</title> 
      <note>Special Edition</note> 
      <quantity>1</quantity> 
      <price>10.90</price> 
     </item> 
     <item> <!--Second Item Tag--> 
      <title>Hide your heart</title> 
      <quantity>1</quantity> 
      <price>9.90</price> 
     </item> 

XML架構

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

<xs:element name="shiporder"> 
    <xs:complexType > 
     <xs:sequence> 
      <xs:element name="orderperson"/> 
      <xs:element name="shipto"> 
       <xs:complexType> 
        <xs:sequence> 
        ` <xs:element name="name" type="xs:string"/> 
         <xs:element name="address" type="xs:string"/> 
         <xs:element name="city" type="xs:string"/> 
         <xs:element name="country" type="xs:string"/> 
         <xs:element name="item"> <!--Only 1 item tag defined in the schema--> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element name="title" type="xs:stri+ng"/> 
             <xs:element name="note" type="xs:string"/> 
             <xs:element name="quantity" type="xs:integer"/> 
             <xs:element name="price" type="xs:decimal"/> 
            </xs:sequence> 
           </xs:complexType> 
          </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 
+0

當您根據您的Xml架構驗證您的Xml文檔時,是否有任何錯誤消息? –

+0

其實你沒有在模式中定義'item',而是'items'。 – helderdarocha

+0

我得到的唯一錯誤消息是\t元素'xs:sequence'不能包含character [children],因爲該類型的內容類型僅爲元素。第25行 – user3399960

回答

0

,以配合您的XML實例,你應該在你的XML Schema的一些變化。

(我假設你想聲明item而不是items。)

首先,要定義itemshipto子元素,當我相信(從你的XML實例,然後從標籤的含義)這也許應該是在同一水平:

<xs:element name="shiporder"> 
    <xs:complexType > 
     <xs:sequence> 
      <xs:element name="orderperson"/> 
      <xs:element name="shipto"> 
       ... 
      </xs:element> 
      <xs:element name="item"> 
       ... 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 

</xs:element> 

允許多於一個item你可以聲明maxOccurs="unbounded"或定義下限爲:

<xs:element name="item" maxOccurs="unbounded"> 

您還需要聲明的屬性,shiporder。它應該在complexType定義來完成:

<xs:element name="shiporder"> 
    <xs:complexType > 
     <xs:sequence> 
      ... 
     </xs:sequence> 
     <xs:attribute name="orderid" type="xs:string" /> 
    </xs:complexType> 
</xs:element> 

最後,你必須決定是否note是可選的還是不是。如果是可選的,則聲明

<xs:element name="note" type="xs:string" minOccurs="0"/> 

因爲默認值是1。如果它不是可選的,那麼你必須將它包含在你的XML實例中,否則它將不會被驗證。

+0

驚人的答案謝謝你,只是在驗證過程中的一個問題我一直得到這個:Element'xs:sequence'不能有character [children],因爲這個類型的內容類型是element-only。說錯誤是在第15行 - 我做了你說的所有更改,也是在我的XML文檔中,我必須聲明兩次模式嗎? – user3399960

+0

的確如此。 「」內不應有任何字符。只有元素。也許那裏有一些性格錯誤。 – helderdarocha

+0

在您粘貼的XML中,在第一個「」之前有一個反引號字符「\」 – helderdarocha

相關問題