Controle fichier XML par XSD

Résolu/Fermé
sirefalas Messages postés 219 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 12 février 2014 - 22 oct. 2012 à 16:27
sirefalas Messages postés 219 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 12 février 2014 - 29 oct. 2012 à 11:10
Bonjour à tous,

Voila mon souci, je dois controler l'intégrité d'un fichier XML en passant par un fichier XSD, or je me retrouve soit avec des erreurs soit avec mon controle qui n'est pas complet.
Je voudrais controler la longueur des champs pour m'assurer qu'ils sont corrects.

le fichier XML:
<?xml version="1.0" encoding="ISO-8859-15"?>
<exercice>
  <ligne>
    <CODCLI>SAR_0000123</CODCLI>
  </ligne>
</exercice>


Le fichier XSD que j'ai crée:
<?xml version="1.0" encoding="ISO-8859-15"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="exercice">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="ligne" maxOccurs="unbounded">
	   <xs:complexType>
        <xs:sequence>
		 <xs:simpleType name="CODCLI">
		  <xs:restriction base="xs:string">
		   <xs:length value="11"/>
		  </xs:restriction>
		 </xs:simpleType>
		</xs:sequence>
	   </xs:complexType>
	  </xs:element>
	 </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:schema>


Lorsque je fais mon controle, je me retrouve avec l'erreur suivante:
s4s-elt-must-match.1 : Le contenu de 'sequence' doit concorder avec (annotation?, (element | group | choice | sequence | any)*). Problème détecté à partir de : simpleType.

Merci d'avance de votre aide

A voir également:

1 réponse

sequence n'accepte que des elements. Il faut donc créer un type pour CODCLI.
Ca donne ça :

  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  
		 <xs:simpleType name="codeclient">
		  <xs:restriction base="xs:string">
		   <xs:length value="11"/>
		  </xs:restriction>
		 </xs:simpleType>
  
   <xs:element name="exercice">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="ligne" maxOccurs="unbounded">
	   <xs:complexType>
        <xs:sequence>
          <xs:element name="CODCLI" type="codeclient"/>
		</xs:sequence>
	   </xs:complexType>
	  </xs:element>
	 </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:schema>
1
sirefalas Messages postés 219 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 12 février 2014 8
29 oct. 2012 à 10:57
Merci,
Je m'en vais tester de ce pas.
J'avais trouvé une solution de contournement en passant par un xs:pattern
Le truc qui me gène c'est que je vais me retrouver à devoir créer un type pour toutes les données où je veux vérifier la taille du champ :(
0
sirefalas Messages postés 219 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 12 février 2014 8
29 oct. 2012 à 11:10
Je confirme mon message plus haut, j'ai trop de variables pour passer par cette méthode la.
J'ai préféré faire ça:

<xs:element name="CODCLI">
  <xs:simpleType>
   <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9_]{11}"/>
   </xs:restriction>
  </xs:simpleType>
</xs:element>


En plus ça me donne un controle en plus si jamais je veux filtrer les caractères spéciaux
0