xml - 元素类型 xs :element must be terminated by the matching end-tag </xs:element>

标签 xml xsd xsd-validation xml-validation

我的 XML 架构上有一条错误消息。首先,这是我的 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>

我收到的错误是

The element type xs:element must be terminated by the matching end-tag </xs:element>

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

XML 文件显示我缺少 xs:schema 结束标记。嗯,就在那里…… 我使用的编辑器是oXygen。

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

最佳答案

除了 @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>

关于xml - 元素类型 xs :element must be terminated by the matching end-tag </xs:element>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38756993/

相关文章:

java - XML验证: Invalid content was found starting with element

android - Android 上的 XMLSchema 验证

xml - 使用 XSD 进行 aadhar auth XML 验证

XML 转换 - XSL 模板匹配多个条件

android - 安卓:elevation tag raises issue in android layout file

java - 如何从不同的maven项目导入spring资源?

xml - XSD 可选元素 minOccurs ="0"但在验证时这是预期的吗?

XML-JSON 转换器规则

xml - 根据一个属性值进行 XSD 类型验证

.net - XmlSerializer - 必需的元素