我一直在练习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'开头。目前尚无子元素。
元素客户确实有孩子:全名,地址,联系方式和计量表。
您在reference
元素上具有属性customer
,但在customerinfo
元素上没有。
模式说明customerinfo
元素应以fullname
子元素开头,但在该实例中,子元素名为customer
。
模式表明meter
元素必须具有单个reading
子元素,但是您的实例具有多个reading
子元素。