簡體   English   中英

XML兩個名稱相同的標簽

[英]XML two tags with the same name

在我的XML文檔中,我有兩個名稱相同的標簽,都稱為item。現在,考慮到我有兩個名稱相同的標簽,我已經為該文檔創建了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>

為了匹配您的XML實例,您應該在XML模式中進行一些更改。

(我假設您要聲明item而不是items 。)

首先,當我相信(從您的XML實例和標簽的含義)它應該應該處於同一級別時,您將item定義為shipto的子元素:

 <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實例中,否則它將無法驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM