Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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. big_smile

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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. wink

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

pingouinux a écrit :
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. wink
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 wink
awk : simple et puissant !


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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