XML验证:“在这一点上没有预期的子元素”

时间:2014-01-24 19:59:23

标签: xml xsd xml-validation

我正在尝试根据给定的XML文件开发XSD语法。给定的XML文件 itemList.xml 如下所示。

<?xml version="1.0" encoding = "utf-8"?>
<itemList 
    xmlns="http://www.w3schools.com" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.w3schools.com  itemList.xsd" >
     <item>spoon</item>  
     <item>knife</item>
     <item>fork</item>  
     <item>cup</item>
</itemList>

我开发的 itemList.xsd 文件如下所示。

<schema 
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:co="http://www.w3schools.com"
    targetNamespace="http://www.w3schools.com" 
    elementFormDefault="qualified">
<simpleType name="itemType">
    <restriction base="string"/>
</simpleType>
<complexType name="itemListType">
    <sequence>
        <element name="item" type="co:itemType"/>
    </sequence>
</complexType>
<element name="itemList" type="co:itemListType"/>
</schema>

当我使用this XML validator针对XSD验证XML时,出现错误

Cvc-complex-type.2.4.d: Invalid Content Was Found Starting With Element 'item'. No Child Element Is Expected At This Point.. Line '6', Column '12'.

我似乎应该在 itemList.xsd 中重写我的complexType,但我不知道该怎么做。非常感谢任何可以提供帮助的人。

2 个答案:

答案 0 :(得分:27)

您的itemList目前仅由一个项目组成;这是因为默认的粒子基数是1(minOccurs = maxOccurs = 1)。

如果你想要多个,那么你需要添加带有适当数字的maxOccurs属性;对于无限制,请使用maxOccurs =“unbounded”......如此:

<element name="item" type="co:itemType" maxOccurs="unbounded"/>

答案 1 :(得分:11)

在我的情况下,我得到了这条消息,因为我的XML中的字段顺序与我的XSD中的字段顺序不一致,我错误地颠倒了最后两个字段的顺序。

虽然这不是问题中的情况,但我认为这可能会帮助那些被这个问题所吸引的人(无疑我将来会再次提到这个问题,因为我忘记了我刚刚学到的东西)。