Проверка 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, я ошибочно изменил порядок последних двух полей.
хотя это не ситуация в вопросе, я думал, что это может помочь другим, которые привлечены к этому вопросу названием (несомненно, я буду ссылаться на этот вопрос снова в будущем, когда я забуду то, что я только что узнал).