Проверка 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, но я не уверен, что делать. Большое спасибо тому, кто мог бы помочь.
Ответы
Ответ 1
В настоящее время ваш itemList состоит только из одного элемента; это потому, что мощность частиц по умолчанию равна 1 (minOccurs = maxOccurs = 1).
Если вам нужно больше одного, вам нужно добавить атрибут maxOccurs с соответствующим номером; для неограниченного использования maxOccurs = "unbounded"... так:
<element name="item" type="co:itemType" maxOccurs="unbounded"/>
Ответ 2
В моем случае я получил это сообщение, потому что упорядочение полей в моем XML не соответствует тем, что было в моем XSD, я ошибочно изменил порядок двух последних полей.
Хотя это не та ситуация в вопросе, я думал, что это может помочь другим, которые обращаются к этому вопросу по названию (несомненно, я снова буду ссылаться на этот вопрос в будущем, когда я забуду то, что только что узнал).