web-dev-qa-db-fra.com

Validation XML: "Aucun élément enfant n'est attendu à ce stade"

J'essaie de développer une grammaire XSD en fonction d'un fichier XML donné. Le fichier XML donné itemList.xml est illustré comme ci-dessous.

<?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>

Le fichier itemList.xsd que j'ai développé est illustré ci-dessous.

<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>

Lorsque je valide le XML par rapport au XSD en utilisant ce validateur XML , j'obtiens l'erreur

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'.

Il semble que je devrais réécrire mon complexType dans itemList.xsd , mais je ne sais pas quoi faire. Un grand merci à tous ceux qui pourraient aider.

15
goldfrapp04

Votre itemList se compose actuellement d'un seul article; c'est parce que la cardinalité des particules par défaut est 1 (minOccurs = maxOccurs = 1).

Si vous en souhaitez plusieurs, vous devez ajouter l'attribut maxOccurs avec le numéro approprié; pour illimité, utilisez maxOccurs = "illimité" ... comme ceci:

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

Dans mon cas, j'ai reçu ce message car l'ordre des champs dans mon XML ne correspondait pas à ceux de mon XSD, j'avais inversé par erreur l'ordre des deux derniers champs.

Bien que ce ne soit pas la situation dans la question, j'ai pensé que cela pourrait aider d'autres qui sont attirés par cette question par le titre (sans doute, je referai référence à cette question à l'avenir quand j'oublierai ce que je viens d'apprendre).

12
DaveRlz