大家好我正在学习如何验证XML文件,但我收到了属性部分的错误。所以这是我的XML文件:
<?xml version="1.0" encoding="ISO88591"?>
<feedback xs:noNamespaceSchemaLocation = "Num1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<studentemail>s1@uom.ac.mu</studentemail>
<modulename code="CSE2041">Web Tech II</modulename>
<moduleyear>2010</moduleyear>
<classsize>Adequate</classsize>
</feedback>
这是XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="feedback">
<xs:complexType>
<xs:sequence>
<xs:element name="studentemail" type="xs:string"/>
<xs:element name="modulename" type="xs:string">
<xs:complexType>
<xs:sequence>
<xs:element name="moduleyear" type="xs:integer"/>
<xs:element name="classsize" type="xs:string"/>
</xs:sequence>
<xs:attribute name="code" type="xs:string"/> //errors
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
错误消息是:
XML文档中的错误:
4:52 cvc-complex-type.2.3:元素'modulename'不能有字符[children],因为类型的内容类型只是元素。
4:52 cvc-complex-type.2.4.b:元素'modulename'的内容不完整。其中一个'{“”:moduleyear}'是预期的。
5:13 cvc-complex-type.2.4.d:从元素'moduleyear'开始发现无效内容。此时不会有子元素。
文件xml-schema中的错误:
10:48 src-element.3:元素'modulename'同时具有'type'属性和'anonymous type'子元素。其中只允许其中一个元素。
请帮帮我。感谢。
答案 0 :(得分:1)
如果对其进行一处更改,您将能够成功验证XML:
encoding="ISO88591"
更改为encoding="ISO-8859-1"
。对XSD进行了两处更改:
moduleyear
和classsize
移至兄弟姐妹而不是modulename
的子女。modulename
的内容模型以使用string-content-with-attributes模式,如下所示:<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="feedback">
<xs:complexType>
<xs:sequence>
<xs:element name="studentemail" type="xs:string"/>
<xs:element name="modulename">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="code" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="moduleyear" type="xs:integer"/>
<xs:element name="classsize" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 1 :(得分:0)
如果您希望元素包含字符内容和属性但不包含子元素,那么您需要为complexType
提供simpleContent
扩展的简单类型角色内容:
<xs:element name="modulename">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute ....
如果你想将facets应用于字符串值(例如,禁止空字符串值),那么你必须分两个阶段进行,首先使用facets声明一个名为simpleType
的
<xs:simpleType name="nonEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
然后给元素complexType
扩展简单的
<xs:element name="modulename">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="nonEmptyString">
<!-- attribute declarations go here -->