#1 Le 29/06/2013, à 00:31
- urustu
CSV2XML ou convertir un fichier plat en fichier XML
Bonjour,
Je cherche à savoir s'il existe un moyen simple de convertir un fichier plat (en CSV par exemple, avec les titres en 1ère ligne) vers un fichier XML.
Je m'étonne que OOCalc ne le propose pas.
HP Pavilion 17-e027sf | CPU AMD A4-5000 alias Kabini | Graphique Radeon HD 8330 | Wifi Realtek RTL8188EE > 3-boot > Ubuntu 18.04 LTS | Mint | Fedora
Samsung 300E7A nVidia Optimus > Mint
Hors ligne
#2 Le 29/06/2013, à 20:39
- Zakhar
Re : CSV2XML ou convertir un fichier plat en fichier XML
Google est ton ami.
csv to xml
==> Environ 14 million de résultats.
Si avec ça tu ne trouves pas ton bonheur...
Dernière modification par Zakhar (Le 29/06/2013, à 20:40)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#3 Le 01/07/2013, à 03:55
- nesthib
Re : CSV2XML ou convertir un fichier plat en fichier XML
@Zakhar : merci d'éviter ce genre de réponses, si la recherche et si facile prends au moins la peine de donner une solution qui fonctionne…
@urustu : peux-tu donner un exemple de ton fichier csv et du rendu que tu souhaiterais en xml ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#4 Le 01/07/2013, à 14:31
- urustu
Re : CSV2XML ou convertir un fichier plat en fichier XML
Merci Nesthib de prendre ma défense car la réponse de Zakhar n'avait l'intérêt que de faire remonter le sujet.
En effet, j'ai bien cherché sur les moteurs de recherche parmi tous mes amis, mais les seules réponses que j'ai trouvé c'est en PERL, Python ou PHP et très peu de KSH/SH/BASH.
En fait ma question était toute simple : c'est de savoir s'il existe un outil standard sous Ubuntu qui transforme un fichier .CSV en .XML tout comme on trouve des DOS2UX, UX2DOS...
Je ne suis pas un expert en XML, alors j'imaginais les fichiers ainsi :
Fichier .CSV:
colonne1,colonne2,colonne3,...,colonneN
ligne1_valeur1,ligne1_valeur2,ligne1_valeur3,...,ligne1_valeurN
ligne2_valeur1,ligne2_valeur2,ligne2_valeur3,...,ligne2_valeurN
ligne3_valeur1,ligne3_valeur2,ligne3_valeur3,...,ligne3_valeurN
.
.
.
ligneM_valeur1,ligneM_valeur2,ligneM_valeur3,...,ligneM_valeurN
<xml>
<ligne>
<colonne1>ligne1_valeur1</colonne1>
<colonne2>ligne1_valeur2</colonne2>
<colonne3>ligne1_valeur3</colonne3>
...
<colonneN>ligne1_valeurN</colonneN>
</ligne>
<ligne>
<colonne1>ligne2_valeur1</colonne1>
<colonne2>ligne2_valeur2</colonne2>
<colonne3>ligne2_valeur3</colonne3>
...
<colonneN>ligne2_valeurN</colonneN>
</ligne>
<ligne>
<colonne1>ligne3_valeur1</colonne1>
<colonne2>ligne3_valeur2</colonne2>
<colonne3>ligne3_valeur3</colonne3>
...
<colonneN>ligne3_valeurN</colonneN>
</ligne>
...
<ligne>
<colonne1>ligneM_valeur1</colonne1>
<colonne2>ligneM_valeur2</colonne2>
<colonne3>ligneM_valeur3</colonne3>
...
<colonneN>ligneM_valeurN</colonneN>
</ligne>
</xml>
En fait en regardant de plus près, je crains que cela ne réponde pas à mes besoins :
- KeePass : je cherche à exporter un fichier plat de mot de passe au format XML pour l'importer dans KeePass 2 ou KeePass X.
- Gramps : je cherche à exporter ma base de généalogie de telle sorte de pouvoir l'importer sous Gramps.
En regardant de plus la structure des fichiers .XML (de KeePass dans un 1er temps), je m'aperçois que l'on peut écrire un fichier XML de plusieurs façons. Je pensais que le XML était un format de stockage universel des données mais j'ai l'impression de mettre mis le doigt dans l'oeil.
HP Pavilion 17-e027sf | CPU AMD A4-5000 alias Kabini | Graphique Radeon HD 8330 | Wifi Realtek RTL8188EE > 3-boot > Ubuntu 18.04 LTS | Mint | Fedora
Samsung 300E7A nVidia Optimus > Mint
Hors ligne
#5 Le 01/07/2013, à 16:20
- pingouinux
Re : CSV2XML ou convertir un fichier plat en fichier XML
Bonjour,
Voici un exemple avec awk, à adapter en fonction de la structure du fichier xml.
$ cat fichier.csv
colonne1,colonne2,colonne3
ligne1_valeur1,ligne1_valeur2,ligne1_valeur3
ligne2_valeur1,ligne2_valeur2,ligne2_valeur3
ligne3_valeur1,ligne3_valeur2,ligne3_valeur3
ligne4_valeur1,ligne4_valeur2,ligne4_valeur3
awk -F, '{if(NR==1){print "<xml>";for(k=1;k<=NF;++k)col[k]=$k}else{print "\t<ligne>";for(k=1;k<=NF;++k)printf("\t\t<%s>%s</%s>\n",col[k],$k,col[k]);print"\t</ligne>"}}END{print "</xml>"}' fichier.csv >fichier.xml
$ cat fichier.xml
<xml>
<ligne>
<colonne1>ligne1_valeur1</colonne1>
<colonne2>ligne1_valeur2</colonne2>
<colonne3>ligne1_valeur3</colonne3>
</ligne>
<ligne>
<colonne1>ligne2_valeur1</colonne1>
<colonne2>ligne2_valeur2</colonne2>
<colonne3>ligne2_valeur3</colonne3>
</ligne>
<ligne>
<colonne1>ligne3_valeur1</colonne1>
<colonne2>ligne3_valeur2</colonne2>
<colonne3>ligne3_valeur3</colonne3>
</ligne>
<ligne>
<colonne1>ligne4_valeur1</colonne1>
<colonne2>ligne4_valeur2</colonne2>
<colonne3>ligne4_valeur3</colonne3>
</ligne>
</xml>
Édité : Correction
Dernière modification par pingouinux (Le 01/07/2013, à 20:28)
Hors ligne
#6 Le 01/07/2013, à 23:08
- urustu
Re : CSV2XML ou convertir un fichier plat en fichier XML
awk -F, '{if(NR==1){print "<xml>";for(k=1;k<=NF;++k)col[k]=$k}else{print "\t<ligne>";for(k=1;k<=NF;++k)printf("\t\t<%s>%s</%s>\n",col[k],$k,col[k]);print"\t</ligne>"}}END{print "</xml>"}' fichier.csv >fichier.xml
Merci pingouinux pour ce fabuleux script avec awk.
C'est exactement ce genre de fonctionnalité que je recherchais.
Ce fil fera la 14 000 001e référence dans Google.
Il ne reste plus qu'à le coder dans une abbreviation sous le nom de csv2xml.
Mais comme je le constate ça ne me suffit pas pour aller plus loin dans l'import de fichier plat.
Chaque application traite le XML à sa façon.
Merci.
HP Pavilion 17-e027sf | CPU AMD A4-5000 alias Kabini | Graphique Radeon HD 8330 | Wifi Realtek RTL8188EE > 3-boot > Ubuntu 18.04 LTS | Mint | Fedora
Samsung 300E7A nVidia Optimus > Mint
Hors ligne
#7 Le 02/07/2013, à 03:08
- nesthib
Re : CSV2XML ou convertir un fichier plat en fichier XML
Je n'aurais pas proposé mieux
awk : simple et puissant !
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#8 Le 02/07/2013, à 10:59
- pingouinux
Re : CSV2XML ou convertir un fichier plat en fichier XML
Petite simplification (utilisation de split) :
awk -F, '{if(NR==1){print "<xml>";split($0,col)}else{print "\t<ligne>";for(k=1;k<=NF;++k)printf("\t\t<%s>%s</%s>\n",col[k],$k,col[k]);print"\t</ligne>"}}END{print "</xml>"}' fichier.csv >fichier.xml
Hors ligne