[英]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.