Transformer du XML en CSV

Transformer du XML en CSV

Ste?phane Bortzmeyer

Premie`re re?daction de cet article le 22 de?cembre 2006. Dernie`re mise a` jour le 23 janvier 2007



-------------------

Issues d'une question pose?e sur la liste XML-fr , voici trois fac?ons possibles de traduire un fichier du format XML vers le format CSV. Une pre?cision, tout d'abord, puisque cet article rec?oit beaucoup de visites d'utilisateur d'un moteur de recherche qui ont simplement tape?

convertir du xml en csv dans ce dernier ; toutes ces me?thodes impliquent de programmer. Il n'est pas possible de trouver un programme tout fait qui convertisse n'importe quel fichier XML en CSV, car les mode`les de donne?es sont trop diffe?rents.

Notons d'abord que le format CSV, de?crit dans le RFC 4180 1, n'est pas structure? : on ne peut pas mettre des tuples dans d'autres tuples, contrairement a` ce que permettent des formats hie?rarchiques comme XML ou JSON. D'une manie`re ge?ne?rale, si un e?le?ment XML peut apparaitre plusieurs fois, la traduction en CSV va e^tre proble?matique.

Prenons par exemple de fichier XML des langues parle?es au Se?ne?gal (j'ai utilise? les informations publie?es par SIL). :

wo Wolof Ouolof 3568

607 Manding

1. Pour voir le RFC de nume?ro NNN, , par exemple . org/rfc/rfc4180.txt

1

2

Mandinka man dyo 293 Jola-Fonyi snkSoninke194

Si on veut le traduire en CSV, on devra choisir comment placer les diffe?rents noms, chaque langue pouvant en avoir plusieurs. Une solution courante est de les mettre dans une seule case, se?pare? par un autre se?parateur (par exemple un point-virgule si le se?parateur principal est une virgule).

Ici, nous allons simplifier le proble`me en ne mettant qu'un nom par langue :

wo Wolof 3568

607 Manding man dyo 293 Jola-Fonyi snkSoninke194

La premie`re technique employe?e sera XSLT, un langage de?claratif. Notre script sera :

------------------

3

, , &newln;

Et son utilisation, ici avec xsltproc :

% xsltproc -o langues.csv langues2csv.xslt langues.xml

produira :

wo,Wolof,3568 man,Manding,607 dyo,Jola-Fonyi,293 snk,Soninke,194

Tout le monde n'aime pas XSLT. La deuxie`me me?thode va donc utiliser un langage impe?ratif, Python, avec le module ElementTree :

#!/usr/bin/python

import cElementTree import sys

if len(sys.argv) ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download