验证中的XML模式错误

问题描述 投票:1回答:1

我一直在练习XML的编码模式。到目前为止,我已经取得了进展。当我尝试验证架构时,出现3个我不理解的错误。

customer.xml

<customerinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="customer.xsd">
        <customer reference="A1">
            <fullname>
                <title>Miss</title>
                <firstname>Summer</firstname>
                <middlename>K</middlename>
                <lastname>Simpson</lastname>
            </fullname>
            <address>
                <street>12 Blood Street</street>
                <suburb>Melbourne</suburb>
                <postcode>1111</postcode>
                <state>VIC</state>
            </address>
            <contact>
                <phone>123456789</phone>
                <phone>123456789</phone>
                <phone>123456789</phone>
            </contact>
            <meter number="1">
            <reading>
                <date>2019-10-03</date>
                <meterread>100</meterread>
                <amtdue>100.00</amtdue>
                <paymentdate>2019-10-03</paymentdate>
                <amtpaid>100.00</amtpaid>
            </reading>
            <reading>
                <date>2019-10-03</date>
                <meterread>100</meterread>
                <amtdue>100.00</amtdue>
                <paymentdate>2019-10-03</paymentdate>
                <amtpaid>100.00</amtpaid>
            </reading>
            </meter>
        </customer>
        <customer reference="A2">
            <fullname>
                <title>Miss</title>
                <firstname>April</firstname>
                <middlename>P</middlename>
                <lastname>Duck</lastname>
            </fullname>
            <address>
                <street>32 Cardigan Street</street>
                <suburb>Wonderland</suburb>
                <postcode>9000</postcode>
                <state>SA</state>
            </address>
            <contact>
                <phone>123456789</phone>
            </contact>
            <meter number="2">
            <reading>
                <date>2019-10-03</date>
                <meterread>100</meterread>
                <amtdue>100.00</amtdue>
                <paymentdate>2019-10-03</paymentdate>
                <amtpaid>100.00</amtpaid>
            </reading>
            </meter>
        </customer>
</customerinfo>

customer.xsd

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

<xs:element name="customerinfo">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="customer"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<xs:element name="customer">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="fullname"/>
   <xs:element name="address"/>
   <xs:element name="contact"/>
   <xs:element name="meter"/>
  </xs:sequence>
   <xs:attribute name="reference" type="xs:string" use="required"/>
 </xs:complexType>
</xs:element>

<xs:element name="fullname">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="title" type="xs:string"/>
   <xs:element name="firstname" type="xs:string"/>
   <xs:element name="middlename" type="xs:string"/>
   <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<xs:element name="address">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="street" type="xs:string"/>
   <xs:element name="suburb" type="xs:string"/>
   <xs:element name="postcode" type="xs:integer"/>
   <xs:element name="state" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<xs:element name="contact">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="phone" type="xs:integer" maxOccurs="3"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<xs:element name="meter">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="reading" maxOccurs="unbounded"/>
  </xs:sequence>
   <xs:attribute name="number" type="xs:integer" use="required"/>
 </xs:complexType>
</xs:element>

<xs:element name="reading">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="date" type="xs:date"/>
   <xs:element name="meterread" type="xs:integer"/>
   <xs:element name="amtdue" type="xs:decimal"/>
   <xs:element name="paymentdate" type="xs:date"/>
   <xs:element name="amtpaid" type="xs:decimal"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

</xs:schema>

错误是:

属性“引用”必须出现在元素“ customerinfo”上。

我不明白这一点,因为我已经说明了属性参考

发现无效的内容从元素'customer'开始。预期为“ {fullname}”之一。

我不明白这一点,因为我已经声明了元素全名

发现无效的内容是从元素“阅读”开始的。目前尚无子元素。

我也不理解这一点,因为阅读确实有很多孩子,例如日期,抄表,amdue,paymentdate和amtpaid?

编辑:我已经设法解决了上面的错误,但是现在我遇到了一个新的错误。我还更新了帖子中的xsd文件。

发现无效的内容以元素'customer'开头。目前尚无子元素。

元素客户确实有孩子:全名,地址,联系方式和计量表。

xml xsd xsd-validation xml-validation
1个回答
1
投票
  1. 您在reference元素上具有属性customer,但在customerinfo元素上没有。

  2. 模式说明customerinfo元素应以fullname子元素开头,但在该实例中,子元素名为customer

  3. 模式表明meter元素必须具有单个reading子元素,但是您的实例具有多个reading子元素。

© www.soinside.com 2019 - 2024. All rights reserved.