Comment convertir un fichier CSV en XML?


8

Comment convertir un fichier CSV en XML?

Existe-t-il un logiciel pour Ubuntu?


Je ne comprends pas. Les trois formats que vous mentionnez sont des fichiers en texte brut --- la différence est dans le contenu. Et la portée. Pourriez-vous ajouter un exemple?
Rmano

1
Voter pour rouvrir. Je considère cela assez simple et facile à répondre ;-)
Rinzwind

1
Je soutiens Rinzwind, car je viens de demander le logiciel qui peut convertir.
Vitor Mazuco

Réponses:


7

Sur le site Web de la communauté sur la conversion, il existe un lien vers un outil en ligne de commande appelé csv2xml . Comme il n'est pas entretenu, vous pouvez choisir une autre option.

Il est également fait mention d'un outil java appelé csv2xml (avertissement: le site Web est en allemand) et d'un outil en ligne de commande appelé ff-extractor .

Le lien contient également des références à Python, Perl, PHP, XSLT mais cela signifie que vous devez coder le convertisseur vous-même.


1
J'ai mis à jour un peu les références dans le 1er lien. Il existe également un produit commercial appelé Altova ( altova.com ).
Rinzwind du

10

Lorsque vous connaissez le format du csvfichier et la structure dont vous avez besoin dans le xmlfichier, il est assez simple de créer un script capable de gérer la conversion.

Prenez le fichier simple.csv:

Jack,35,United States
Jill,22,United Kingdom

Vous pouvez créer le xmlfichier suivant :

<?xml version="1.0"?>
<Customers>
  <Customer>
    <Name>Jack</Name>
    <Age>35</Age>
    <Country>United States</Country>
 </Customer>
 <Customer>
    <Name>Jill</Name>
    <Age>22</Age>
    <Country>United Kingdom</Country>
 </Customer>
</Customers>

Avec le script suivant:

#!/bin/bash
file_in="simple.csv"
file_out="simple.xml"
echo '<?xml version="1.0"?>' > $file_out
echo '<Customers>' >> $file_out
while IFS=$',' read -r -a arry
do
  echo '  <Customer>' >> $file_out
  echo '    <Name>'${arry[0]}'</Name>' >> $file_out
  echo '    <Age>'${arry[1]}'</Age>' >> $file_out
  echo '    <Country>'${arry[2]}'</Country>' >> $file_out
  echo '  </Customer>' >> $file_out
done < $file_in
echo '</Customers>' >> $file_out

Même si vous n'avez jamais codé auparavant, je pense que cela devrait être facile à utiliser et à modifier. Le fichier est lu ligne par ligne dans la whileboucle.

IFSest le spécificateur de champ interne. Le IFS=$','déclare que la valeur du séparateur de champ est une virgule. Ceci est standard pour un fichier CSV, mais il peut être modifié selon les besoins pour correspondre au format de fichier d'entrée.

L' -rargument de la readcommande lui indique de traiter toutes les barres obliques inverses dans votre fichier comme faisant partie de vos données plutôt que comme un échappement pour un caractère spécial suivant.

L' -a arryargument place chaque colonne de votre fichier dans un tableau (nommé arry). Les colonnes de cet exemple sont le nom, l'âge, le pays. En d'autres termes, les valeurs entre les virgules. Ainsi, chaque colonne de la ligne est stockée dans un tableau.

Ensuite, le texte nécessaire pour xmlest simplement enroulé autour des valeurs et la xmlligne est ajoutée au fichier de sortie avec echo.


@chaskes, si vous expliquez l'option utilisée en ligne while IFS=$',' read -r -a arry , elle est utile pour une autre. Merci.
alhelal

@BandaMuhammadAlHelal Done.
chasse le

Comment traiteriez-vous les virgules apparaissant dans les champs, entourées de guillemets doubles? Comme à la "Somename, Jack"place de Jackdans le fichier d'entrée?
muk.li

1
@ muk.li Le séparateur de champ de saisie (généralement une virgule) est marqué à la ligne commençant: alors que IFS = $ ','. Supposons que le séparateur soit un astérisque, vous devez simplement le changer en: $ '*'. Donc, dans votre cas, ce devrait être $ '"' (guillemet simple, guillemet double, guillemet simple). Cela devrait fonctionner correctement, mais les citations dans le shell peuvent devenir délicates, et je n'ai pas eu l'occasion de le tester.
chasse le

1

Une solution assez conviviale (c'est-à-dire facile à utiliser pour moi) au défi de conversion CSV en XML consiste à utiliser un bel éditeur XML multiplateforme qui intègre cette fonctionnalité. (Je l'ai utilisé à la fois sous Ubuntu et Mac OSX 10.10.5; il a également un exécutable Windows.)

XMLSpear

Comme mentionné, il s'agit d'un éditeur XML, mais il inclut une "importation" CSV vers XML (et Excel vers XML) dans son menu principal:

entrez la description de l'image ici

Il m'a converti un fichier CSV de 31 Mo (un vidage à partir d'une base de données de bibliothèque de 20 000 entrées) en environ 15 secondes, me donnant un fichier XML bien formé à enregistrer et à manipuler.

En tant qu'éditeur, il possède de nombreuses autres fonctionnalités de bienvenue (détaillées sur le lien ci-dessus). Je ne trouve aucune mention de licence pour cela, mais cela est inclus dans le "README":

XMLSpear est un logiciel gratuit à usage personnel.
Veuillez envoyer vos commentaires à xmlspear@donkeydevelopment.com ou sur le forum http://donkeydevelopment.com/forums.

L'utilisation commerciale doit être approuvée par donkeydevelopment.
Envoyez simplement un e-mail à xmlspear@donkeydevelopment.com avec le sujet "demande de licence".

Le fichier Lisez-moi inclut également le contenu d'un fichier .desktop.

Fait bien le travail pour moi sous Ubuntu 18.04 LTS (Gnome).



0

Je suggérerais à vous ou à quelqu'un d'écrire des codes en Python. Python est facile à apprendre et à résoudre facilement votre problème. Il possède à la fois un module CSV et des modules XML . Ma suggestion prend en considération que vous pourriez avoir besoin d'avoir vos propres noms pour les éléments XML ou avoir d'autres exigences complexes (comme la conversion de la dernière colonne CSV en attribut de la dernière mais une seule colonne).

Il existe des tonnes de tutoriels en ligne sur Python.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.