jeudi 7 mai 2015

Transformation données XML et Encodage

Lorsque vous manipulez la chaine de traitement XML pour transformer vos données en un document exploitable, il faut tenir compte de l'encodage de vos données.

L'encodage pour faire simple est la "façon" de représenter vos données.

Il est donc nécessaire que chaque maillon de la chaine de traitement puisse analyser et comprendre les données transmises.

Pour éviter des données non comprises (et très souvent représentées dans ce cas par des caractères spéciaux), il faut s'assurer d'utiliser le même encodage sur toute la chaine de traitement.

Cela peut sembler évident mais cette "négligence" peut être la source de nombreux problèmes.

Voici quelques conseils.

Nous partirons du principe par exemple que l'encodage sélectionné soit l'UTF-8.

Commençons par les données.

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

Vous devez insérer cette balise en première ligne de votre fichier XML - vous pourrez ainsi utiliser les caractères accentués.

Assurez - vous que l'encodage du fichier soit aussi en UTF-8 - cela peut sembler évident mais dans la pratique nous constatons quelque fois une différence d'encodage entre le fichier et ses données.

Vos documents XSL / XSL:FO doivent aussi comporter :

<?xml version="1.0" encoding="UTF-8"?>

en première ligne.

La précédente remarque sur l'encodage du fichier s'applique aussi dans ce cas.

Une fois que vous êtes sûrs que vos données et fichiers soient bien en UTF-8, cela ne suffit pas.

Il faut s'assurer que lors du traitement de la chaine XML, vos données soient bien lues et écrites en UTF-8.

Exemple :

// données XML
Source sourceDATA = new StreamSource(tempFile);

// feuille de style XSL
FileInputStream stream = new FileInputStream(
templatesList.get(newValue).replace(
"\\", "\\\\"));

Reader reader = new InputStreamReader(stream,"UTF-8");

Source xsl = new StreamSource(reader);

// document HTML en sortie
File temp = File.createTempFile("mon_fichier_de_sortie", ".html");
OutputStream fos = new FileOutputStream(temp);
OutputStreamWriter bw = new OutputStreamWriter(fos, "UTF-8");

Result result = new StreamResult(bw);

// transformation
TransformerFactory factory = TransformerFactory.newInstance();

Transformer transformer = factory.newTransformer(xsl);

transformer.setParameter("encoding", "UTF-8");

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

transformer.transform(sourceDATA, result);

Dans cette exemple, nous transformons (XSL / XSLT) des données XML en un document HTML.

Vous noterez les précautions à prendre pour s'assurer du bon encodage jusqu'au bout du traitement.

Ce principe s'applique pour toutes les technologies XML.

Aucun commentaire:

Enregistrer un commentaire