2017-09-18 2 views
2

Je reçois une erreur en disant The Content Of 'all' Must Match (annotation?, Element*). A Problem Was Found Starting At: Sequence. en essayant de valider mon fichier XML en utilisant mon fichier XSD. J'ai utilisé <xs:all> parce que le nombre de size peut changer dans les nœuds sous-racine. Et je ne suis pas sûr si l'étiquette d'attribut devrait être ajoutée après ou avant la balise <xs:all>.Erreur: le contenu de 'all' doit correspondre

Ceci est mon fichier xml

<?xml version="1.0" encoding="UTF-8"?> 
 
<catalog> 
 
    <product description="Cardigan Sweater" product_image="cardigan.jpg"> 
 
     <catalog_item gender="Men's"> 
 
     <item_number>QWZ5671</item_number> 
 
     <price>39.95</price> 
 
     <size description="Medium"> 
 
      <color_swatch image="red_cardigan.jpg">Red</color_swatch> 
 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
 
     </size> 
 
     <size description="Large"> 
 
      <color_swatch image="red_cardigan.jpg">Red</color_swatch> 
 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
 
     </size> 
 
     </catalog_item> 
 
     <catalog_item gender="Women's"> 
 
     <item_number>RRX9856</item_number> 
 
     <price>42.50</price> 
 
     <size description="Small"> 
 
      <color_swatch image="red_cardigan.jpg">Red</color_swatch> 
 
      <color_swatch image="navy_cardigan.jpg">Navy</color_swatch> 
 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
 
     </size> 
 
     <size description="Medium"> 
 
      <color_swatch image="red_cardigan.jpg">Red</color_swatch> 
 
      <color_swatch image="navy_cardigan.jpg">Navy</color_swatch> 
 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
 
      <color_swatch image="black_cardigan.jpg">Black</color_swatch> 
 
     </size> 
 
     <size description="Large"> 
 
      <color_swatch image="navy_cardigan.jpg">Navy</color_swatch> 
 
      <color_swatch image="black_cardigan.jpg">Black</color_swatch> 
 
     </size> 
 
     <size description="Extra Large"> 
 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
 
      <color_swatch image="black_cardigan.jpg">Black</color_swatch> 
 
     </size> 
 
     </catalog_item> 
 
    </product> 
 
</catalog>

Et voici mon fichier XSD. Je ne sais pas si mon a été placé au bon endroit cependant.

<?xml version="1.0"?> 
 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
 
    <xs:element name="catalog"> 
 
    <xs:complexType> 
 
    <xs:sequence> 
 
    <xs:element name="product"> 
 
     <xs:complexType> 
 
     <xs:sequence> 
 
     <xs:element name="catalog_item"> 
 
     <xs:complexType> 
 
      <xs:sequence> 
 
      <xs:element name="item_number"> 
 
      <xs:simpleType> 
 
      <xs:restriction base="xs:string"> 
 
       <xs:pattern value="[A-Z][A-Z][A-Z][0-9][0-9][0-9][0-9]"/> 
 
      </xs:restriction> 
 
      </xs:simpleType> 
 
      </xs:element> 
 
      <xs:element name="price" type="xs:decimal"/> 
 
      <xs:element name="size"> 
 
      <xs:complexType> 
 
      <xs:all minOccurs="1"> 
 
       <xs:sequence> 
 
       <xs:element name="color_swatch" type="xs:string"> 
 
       <xs:complexType> 
 
       <xs:sequence minOccurs="1" maxOccurs="unbounded"> 
 
       </xs:sequence> 
 
\t \t \t \t <xs:attribute name="image" type="xs:string"/> 
 
       </xs:complexType> 
 
       </xs:element> 
 
       </xs:sequence> 
 
\t \t \t <xs:attribute name="description" type="xs:string"/> 
 
      </xs:all> 
 
      </xs:complexType> 
 
      </xs:element> 
 
\t \t </xs:sequence> 
 
\t \t <xs:attribute name="gender" type="xs:string"/> 
 
\t \t </xs:complexType> 
 
     </xs:element> 
 
\t </xs:sequence> 
 
\t <attribute name="description" type="xs:string"/> 
 
    <attribute name="product_image" type="xs:string"/> 
 
    </xs:complexType> 
 
    </xs:element> 
 
    </xs:sequence> 
 
    </xs:complexType> 
 
</xs:element> 
 
</xs:schema>

Répondre

3

En supposant que vous souhaitez autoriser plusieurs <size> éléments dans un <catalog_item>, vous devez définir maxOccurs="unbounded" sur l'élément size.

<xs:element name="size" maxOccurs="unbounded"> 

Ensuite, vous devrez corriger la définition du contenu de <size> - il n'y a pas de point à l'aide <xs:all> ici (rappelez-vous que <xs:all> signifie « éléments de thèses doivent se produire exactement une fois dans ce contexte, quel que soit l'ordre »). Cela devrait répondre à vos besoins:

<xs:element name="size" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="color_swatch" maxOccurs="unbounded"> 
       <xs:complexType mixed="true"> 
        <xs:attribute name="image" type="xs:string"/> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:attribute name="description" type="xs:string"/> 
     </xs:complexType> 
    </xs:element> 

PS: vous avez oublié le préfixe « xs: » sur les deux dernières déclarations d'attributs:

<attribute name="description" type="xs:string"/> 
<attribute name="product_image" type="xs:string"/> 
+1

qui a résolu le problème en cours. Mais maintenant je reçois une erreur "disant que le contenu est invalide à partir de l'élément" catalog_item "Aucun élément enfant n'est attendu à ce point., Ligne '15', Colonne '38'" Je pense que cette erreur est apparue dans le fichier xml fichier. Est-ce parce que l'élément 'color_swatch' défini dans mon fichier xsd ne permet pas au xml d'avoir plus d'un élément? –

+0

Il est très probablement nécessaire de définir 'maxOccurs =" unbounded "' sur < '. – potame