Bonjour à tous,
Je travaille avec un parser Java (org.apache.xerces.parsers.SAXParser) et j'essaie de transformer les données d'un XML dans un format texte en utilisant une validation XSD pour récupérer des valeurs par défaut.
Exemple de fichier XSD :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="donnees" type="MesDonnees"/> <xsd:complexType name="MesDonnees"> <xsd:all> <xsd:element name="object" type="MonObject" minOccurs="1" maxOccurs="unbounded"/> </xsd:all> </xsd:complexType> <xsd:complexType name="MonObject"> <xsd:sequence> <xsd:complexType> <xsd:sequence> <xsd:element name="tata" type="xsd:string" minOccurs="1"/> <xsd:element name="toto" type="xsd:string" minOccurs="0" default="toto"/> <xsd:element name="tutu" type="xsd:string" minOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:sequence> </xsd:complexType> </xsd:schema>
Exemple de fichier XML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?xml version="1.0"?> <donnees> <object> <tata>tata1</tata> <toto>toto1</toto> <tutu>tutu1</tutu> </object> <object> <tata>tata2</tata> <toto>toto2</toto> <!-- ******** valeur non renseignée ou pas de balises ********--> <tutu>tutu2</tutu> </object> <object> <tata>tata3</tata> <toto>toto3</toto> <tutu>tutu3</tutu> </object> </donnees>
Je souhaite convertir mon XML dans un fichier texte au format suivant :
Le soucis est que parfois, il est possible que dans mon XML, je ne reçoive pas d'élément <toto> (pas de balise ouvrante/fermante).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 tata1:toto1:tutu1 tata2:toto2:tutu2 tata3:toto3:tutu3
Lorsque mon SAXParser, parse le XML, au 2ème bloc <object>, il ne trouve pas le champ <toto>
Visiblement, cela ne le dérange pas car il va me chercher l'élément <toto> du 3ème object.
ce qui donne un résultat incorrect :
alors que je souhaiterai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tata1:toto1:tutu1 tata2:toto3:tutu2
Ce que je souhaiterai c'est que dans les 2 cas où <toto> est vide ou null (pas de balise), récupérer la valeur par défaut définie dans le xsd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 tata1:toto1:tutu1 tata2:toto:tutu2 tata3:toto3:tutu3
J'ai essayé de regarder au niveau du SAXParser mais je ne pense pas que cela soit possible.
Auriez-vous un avis peut être ?
Modification du XSD via XSL, pré-traitement Java...
Merci d'avance
Partager