Проверка XML: "на данный момент дочерний элемент не ожидается"

Я пытаюсь разработать грамматику XSD в соответствии с данным XML-файлом. Данный 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>

когда я проверяю XML против 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'.

кажется, я должен переписать свой complexType на itemList.xsd-схемы, но я не уверен что делать. Большое спасибо всем, кто мог помочь.

2 ответов


ваш itemList в настоящее время состоит ровно из одного элемента; это потому, что мощность частиц по умолчанию равна 1 (minOccurs = maxOccurs = 1).

Если вы хотите больше одного, вам нужно добавить атрибут maxOccurs с соответствующим номером; для неограниченного используйте maxOccurs= "unbounded"... вот так:

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

в моем случае я получил это сообщение, потому что порядок полей в моем XML не соответствовал тем, что в моем XSD, я ошибочно изменил порядок последних двух полей.

хотя это не ситуация в вопросе, я думал, что это может помочь другим, которые привлечены к этому вопросу названием (несомненно, я буду ссылаться на этот вопрос снова в будущем, когда я забуду то, что я только что узнал).