xml的schema的错误
发布网友
发布时间:2022-04-19 07:52
我来回答
共2个回答
热心网友
时间:2022-04-19 09:21
你的 xsd:element节点(哪怕是一个)在 xsd:complexType 下也不能直接出现。
需要作为<xsd:sequence>或者<xsd:choice>中的一个子节点出现在复杂类型元素(xsd:complexType)中。
***你的Schema中的错误***:
1. <xsd:element name="class">直接作为<xsd:complexType>的子节点了。
2. <xsd:element name="student">同样也是直接作为<xsd:complexType>的子节点了。
3.你希望class中可以出现多个student的问题,那么你需要将你对应的element节点加入 maxOccurs="unbounded" 的属性及其值。
例如:
<xsd:element name="student">
改为:
<xsd:element name="student" maxOccurs="unbounded">
(按照语境来说,grade下同样可以有多个class)
4.在复杂类型中<xsd:attribute>节点放在最后。
最终的正确Schema(*对你的稍加修改)
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="grade">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="class" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="student" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="number" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="email" type="xsd:string"/>
<xsd:element name="qq" type="xsd:string"/>
<xsd:element name="address">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="province" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="mailcode" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="number" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="year" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
热心网友
时间:2022-04-19 10:39
首先你的所有属性添加格式都有问题...其次在属性添加中的属性本身最好是定的,这样可以体现出此元素的属性 <xsd:attribute name="year" type="xsd:string" />当中属性year很郁闷...你下面很多都是这样...
以后试试这样定义你的属性:<xs:attribute name='location' fixed='UK'/>
上面的xml应该是
<grade year=''>
<class number=''>
<student>
<number></number>
<name></name>
<email></email>
<qq></qq>
<address>
<province></province>
<city></city>
<street></street>
<mailcode></mailcode>
</address>
</student>
</class>
</grade>
今天太晚了,错误没细看,给你手写了一份,这个肯定不会报错了,明天有时间我再看看:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="grade">
<xs:complexType>
<xs:sequence>
<xs:element ref="class"/>
</xs:sequence>
<xs:attribute name="year" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="class">
<xs:complexType>
<xs:sequence>
<xs:element ref="student"/>
</xs:sequence>
<xs:attribute name="number" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="student">
<xs:complexType>
<xs:sequence>
<xs:element ref="number"/>
<xs:element ref="name"/>
<xs:element ref="email"/>
<xs:element ref="qq"/>
<xs:element ref="address"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element ref="province"/>
<xs:element ref="city"/>
<xs:element ref="street"/>
<xs:element ref="mailcode"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="mailcode" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="number" type="xs:string"/>
<xs:element name="province" type="xs:string"/>
<xs:element name="qq" type="xs:string"/>
<xs:element name="street" type="xs:string"/>
<xs:element name="email" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
</xs:schema>
最近比较忙,上网见少...对不起...刚刚看了下下面的回答,说的好啊...问题说的很对...maxOccurs="unbounded"这个是用于拓展的,如果你的schema编译要添加拓展方面的应用,是要写的。每个class中有多个student的话,只要每个的格式相同就可以编译,不管有几个,你写出一个就可以了。