Sérialisation avec JAXB et des éléments CDATA
Bonsoir la team,
je vous sollicite car je ne comprend pas comment utiliser la sérialisation sur mon exemple. Je vous explique :
Voici un exemple d'un fichier XML:
Code:
1 2 3 4
| <?xml version="1.0" encoding="UTF-8"?>
<MON_FICHIER>
<MA_BALISE>mes élements</MA_BALISE>
</MON_FICHIER> |
Pour avoir des accents dans mon fichier XML il me faut une balise CDATA pour avoir le fichier XML :
Code:
1 2 3 4
| <?xml version="1.0" encoding="UTF-8"?>
<MON_FICHIER>
<MA_BALISE><![CDATA[mes élements]]></MA_BALISE>
</MON_FICHIER> |
Pour cela, j'utilise le code suivant dans ma classe Java pour formatter ma structure XML:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
....
ByteArrayOutputStream out = new ByteArrayOutputStream();
com.sun.org.apache.xml.internal.serialize.XMLSerializer serializer = getXMLSerializer(cdataNodes, bos);
// ObjectFactory ma_structure_xml -> contient mon arbre XML déjà initialisé
xmlParser.getMarshaller().marshal(ma_structure_xml, serializer.asContentHandler());
....
// Méthode générique de sérialisation
private com.sun.org.apache.xml.internal.serialize.XMLSerializer getXMLSerializer(String[] cDataElements, OutputStream cOut) {
// This code is from a sample online: http://jaxb.java.net/faq/JaxbCDATASample.java
// configure an OutputFormat to handle CDATA
com.sun.org.apache.xml.internal.serialize.OutputFormat of = new com.sun.org.apache.xml.internal.serialize.OutputFormat();
// specify which of your elements you want to be handled as CDATA.
// The use of the '^' between the namespaceURI and the localname
// seems to be an implementation detail of the xerces code.
// When processing xml that doesn't use namespaces, simply omit the
// namespace prefix as shown in the third CDataElement below.
of.setCDataElements(cDataElements); // example : "^baz" for node <baz>
// set any other options you'd like
of.setPreserveSpace(true);
of.setIndenting(true);
// create the serializer
com.sun.org.apache.xml.internal.serialize.XMLSerializer serializer = new com.sun.org.apache.xml.internal.serialize.XMLSerializer(of);
serializer.setOutputByteStream(cOut);
return serializer;
} |
J'ai trouvé ce code sur le net, mais je ne comprend pas 2 choses:
- 1) comment doit être utiliser OutputStream cOut en paramètre de la méthode getXMLSerializer ()?
- 2) comment ensuite récupérer un string à partir de la variable "serializer" après l'utilisation de getMarshaller ?
Pour celle ou celui qui a déjà utilisé ce genre de chose ça doit paraître évident, mais je bloque dessus depuis quelques temps.
Merci d'avance pour votre aide.
Berni.