Utiliser valeur par défaut du XSD pour les éléments facultatifs
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:
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:
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 :
Code:
1 2 3
| tata1:toto1:tutu1
tata2:toto2:tutu2
tata3:toto3:tutu3 |
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).
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 : :cry:
Code:
1 2
| tata1:toto1:tutu1
tata2:toto3:tutu2 |
alors que je souhaiterai :
Code:
1 2 3
| tata1:toto1:tutu1
tata2:toto:tutu2
tata3:toto3:tutu3 |
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.
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 ;)