一、问题描述
手起刀落,杂症全消,大家好,今天给大家分享的是Required attribute PRDDID’of parent element 'PRDDUCTDATA’expected before first child element这个问题,具体截图如下:
这里说的是,父类元素“PRODUCTDATA”缺少了一个属性“PRODID”,嗯,既然问题描述这么简单,那么直接补上缺少的属性不就好了,不慌,我们先来看一下我的这个代码,假设我们的xml文档是固定的,你能知道Shemal文档问题出在哪儿了吗:
二、问题代码
Schemal文档
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="PRODUCTDATA" type="res"/>
<xs:complexType name="res">
<xs:sequence>
<xs:element name="PRODUCT" type="ras"/>
</xs:sequence>
<!--注意注意-->
<xs:attribute name="PRODID" type="iddef" use="required"/>
<xs:attribute name="CATEGORY" type="typesdef" use="required"/>
<!--注意这两行-->
</xs:complexType>
<xs:complexType name="ras">
<xs:sequence>
<xs:element name="PRODUCTNAME" type="xs:string"/>
<xs:element name="DESCRIPTION" type="xs:string"/>
<xs:element name="PRICE" type="xs:decimal"/>
<xs:element name="QUANTITY" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="iddef">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{1}\d{3}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="typesdef">
<xs:restriction base="xs:string">
<xs:pattern value="(toy{1}|book{1})"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
XML文档
<?xml version="1.0" encoding="UTF-8"?>
<PRODUCTDATA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:\XML\experiment3\P97_2.xsd">
<PRODUCT PRODID="P001" CATEGORY="toy">
<PRODUCTNAME>Barbie Doll</PRODUCTNAME>
<DESCRIPTION>This is a doll for children aged 11 and above</DESCRIPTION>
<PRICE>75</PRICE>
<QUANTITY>54</QUANTITY>
</PRODUCT>
</PRODUCTDATA>
三、问题分析
话不多说,这个问题的原因是属性错位了,本该是的属性,结果却写成了其父元素的属性,所以要注意的是,属性放在哪个type的声明里,就是哪些调用这个type元素的属性,因此正确的Schema文档如下。
四、正确代码
Schemal文档:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="PRODUCTDATA" type="res"/>
<xs:complexType name="res">
<xs:sequence>
<xs:element name="PRODUCT" type="ras"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ras">
<xs:sequence>
<xs:element name="PRODUCTNAME" type="xs:string"/>
<xs:element name="DESCRIPTION" type="xs:string"/>
<xs:element name="PRICE" type="xs:decimal"/>
<xs:element name="QUANTITY" type="xs:decimal"/>
</xs:sequence>
<!--注意注意-->
<xs:attribute name="PRODID" type="iddef" use="required"/>
<xs:attribute name="CATEGORY" type="typesdef" use="required"/>
<!--注意注意-->
</xs:complexType>
<xs:simpleType name="iddef">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{1}\d{3}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="typesdef">
<xs:restriction base="xs:string">
<xs:pattern value="(toy{1}|book{1})"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
这次的药方就是这样,希望能对你有所帮助。