元素类型xs:元素必须由匹配的结束标记

时间:2016-08-04 01:11:27

标签: xml xsd xsd-validation xml-validation

我的XML Schema上有一条错误消息。首先,这是我的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<customer xmlns:xsi="http:www.w3.org/2001/XMLSchema"
    xsi:noNamespaceSchemaLocation="customer.xsd">
    <name>
        <first>Bob</first>
        <MI>H</MI>
        <last>Jones</last>
    </name>
    <cnum>007389</cnum>
    <mail_a>
        <line1>12345 Mockingbird Lane</line1>
        <city>Omaha</city>
        <state>NE</state>
        <zip>68123</zip>
        <country>USA</country>
    </mail_a>
    <deliver_a>
        <line1>12345 Mockingbird Lane</line1>
        <city>Omaha</city>
        <state>NE</state>
        <zip>68123</zip>
        <country>USA</country>
    </deliver_a>
    <member_date>1995-10-15</member_date>
    <l_order_date>2003-08-02</l_order_date>
</customer>

这是我的架构:

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

  <xs:element name="customer"/>
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element ref="cnum"/>
      <xs:element ref="mail_a"/>
      <xs:element ref="deliver_a"/>
      <xs:element ref="member_date"/>
      <xs:element ref="l_order_date"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="first" type="xs:string"/>
<xs:element name="MI" type="xs:string"/>
<xs:element name="last" type="xs:string"/>
<xs:element name="cnum" type="xs:integer"/>
<xs:element name="line1" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="state" type="xs:string"/>
<xs:element name="zip" type="xs:integer"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="member_date" type="xs:date"/>
<xs:element name="l_order_date" type="xs:date"/>

<xs:element name="name">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="first"/>
      <xs:element ref="MI"/>
      <xs:element ref="last"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

 <xs:element name="mail_a">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="line1"/>
      <xs:element ref="city"/>
      <xs:element ref="state"/>
      <xs:element ref="zip"/>
        <xs:element ref="country"/>
    </xs:sequence>
  </xs:complexType>
 </xs:element>


<xs:element name="deliver_a">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="line1"/>
      <xs:element ref="city"/>
      <xs:element ref="state"/>
      <xs:element ref="zip"/>
      <xs:element ref="country"/>
    </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

我得到的错误是

  

元素类型xs:element必须由匹配终止   结束标记</xs:element>

由于某种原因,它似乎不喜欢第55行(element ref =“line1”),它上面有一个结束标记。

XML文件说我缺少xs:schema结束标记。好吧,那是...... 我正在使用的编辑器是oXygen。

有什么想法?我一直在努力摆弄它。

2 个答案:

答案 0 :(得分:1)

在架构声明之后,您立即关闭了customer元素:

架构元素不正确:

    <xs:element name="customer"/>
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="cnum"/>
            <xs:element ref="mail_a"/>
            <xs:element ref="deliver_a"/>
            <xs:element ref="member_date"/>
            <xs:element ref="l_order_date"/>
        </xs:sequence>
    </xs:complexType>
    </xs:element>

更正架构元素:

    <xs:element name="customer">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="cnum"/>
            <xs:element ref="mail_a"/>
            <xs:element ref="deliver_a"/>
            <xs:element ref="member_date"/>
            <xs:element ref="l_order_date"/>
        </xs:sequence>
    </xs:complexType>
    </xs:element>

答案 1 :(得分:1)

除了过早关闭@randominstanceOfLivingThing提到的customer元素声明之外,你必须更改

xmlns:xsi="http:www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

在您的XML中,您的XSD将被找到,您的XML将成功验证。

以下是整个更正的XML和XSD文件:

XML

<?xml version="1.0" encoding="UTF-8"?>
<customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="try.xsd">
  <name>
    <first>Bob</first>
    <MI>H</MI>
    <last>Jones</last>
  </name>
  <cnum>007389</cnum>
  <mail_a>
    <line1>12345 Mockingbird Lane</line1>
    <city>Omaha</city>
    <state>NE</state>
    <zip>68123</zip>
    <country>USA</country>
  </mail_a>
  <deliver_a>
    <line1>12345 Mockingbird Lane</line1>
    <city>Omaha</city>
    <state>NE</state>
    <zip>68123</zip>
    <country>USA</country>
  </deliver_a>
  <member_date>1995-10-15</member_date>
  <l_order_date>2003-08-02</l_order_date>
</customer>

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="customer">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="cnum"/>
        <xs:element ref="mail_a"/>
        <xs:element ref="deliver_a"/>
        <xs:element ref="member_date"/>
        <xs:element ref="l_order_date"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="first" type="xs:string"/>
  <xs:element name="MI" type="xs:string"/>
  <xs:element name="last" type="xs:string"/>
  <xs:element name="cnum" type="xs:integer"/>
  <xs:element name="line1" type="xs:string"/>
  <xs:element name="city" type="xs:string"/>
  <xs:element name="state" type="xs:string"/>
  <xs:element name="zip" type="xs:integer"/>
  <xs:element name="country" type="xs:string"/>
  <xs:element name="member_date" type="xs:date"/>
  <xs:element name="l_order_date" type="xs:date"/>
  <xs:element name="name">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="first"/>
        <xs:element ref="MI"/>
        <xs:element ref="last"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="mail_a">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="line1"/>
        <xs:element ref="city"/>
        <xs:element ref="state"/>
        <xs:element ref="zip"/>
        <xs:element ref="country"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="deliver_a">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="line1"/>
        <xs:element ref="city"/>
        <xs:element ref="state"/>
        <xs:element ref="zip"/>
        <xs:element ref="country"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>