2014-03-12 166 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

相关问题