Come posso convertire un file CSV in XML?


8

Come posso convertire un file CSV in XML?

Esiste un software per Ubuntu?


Non capisco. I tre formati che menzioni sono file di testo semplice: la differenza sta nel contenuto. E portata. Ti dispiacerebbe aggiungere un esempio?
Rmano,

1
Votazione per riaprire. Lo considero piuttosto semplice e di facile risposta ;-)
Rinzwind

1
Sostengo Rinzwind, perché ho appena chiesto al software in grado di convertire.
Vitor Mazuco,

Risposte:


7

Sul sito Web della comunità sulla conversione è presente un collegamento a uno strumento da riga di comando chiamato csv2xml . Poiché non viene mantenuto, potresti voler scegliere un'altra opzione.

Si parla anche di uno strumento java chiamato csv2xml (attenzione: il sito Web è in tedesco) e uno strumento da riga di comando chiamato ff-extractor .

Il collegamento ha anche riferimenti a Python, Perl, PHP, XSLT ma ciò significa che è necessario codificare il convertitore da soli.


1
Ho aggiornato un po 'con i riferimenti nel 1 ° link. Esiste anche un prodotto commerciale chiamato Altova ( altova.com ).
Rinzwind,

10

Quando conosci il formato del csvfile e la struttura di cui hai bisogno nel xmlfile, è abbastanza semplice creare uno script in grado di gestire la conversione.

Prendi il file simple.csv:

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

È possibile creare il seguente xmlfile:

<?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>

Con il seguente script:

#!/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

Anche se non hai mai codificato prima, penso che questo dovrebbe essere facile da usare e modificare. Il file viene letto riga per riga nel whileciclo.

IFSè l'identificatore di campo interno. L' IFS=$','dichiara che il valore del separatore di campo è una virgola. Questo è standard per un file CSV, ma può essere modificato in base alle esigenze per adattarsi al formato del file di input.

L' -rargomento del readcomando indica che le barre rovesciate nel file vengono trattate come parte dei dati anziché come una fuga per un carattere speciale seguente.

L' -a arryargomento inserisce ciascuna colonna del file in un array (denominato arry). Le colonne in questo esempio sono nome, età, paese. In altre parole, i valori tra le virgole. Quindi ogni colonna nella riga è memorizzata in un array.

Quindi il testo necessario per xmlviene semplicemente racchiuso tra i valori e la xmlriga viene aggiunta al file di output con echo.


@chaskes, se spiegherai l'opzione usata in linea while IFS=$',' read -r -a arry , è utile per un'altra. Grazie.
alhelal,

@BandaMuhammadAlHelal Done.
Chaskes,

Come gestiresti le virgole che compaiono nei campi, racchiuse tra virgolette doppie? Come al "Somename, Jack"posto di Jacknel file di input?
muk.li

1
@ muk.li Il separatore del campo di input (di solito una virgola) è contrassegnato all'inizio della riga: while IFS = $ ','. Diciamo che il separatore è un asterisco, lo cambieresti semplicemente in: $ '*'. Quindi, nel tuo caso, dovrebbe essere $ '"' (virgolette singole, virgolette doppie, virgolette singole). Questo dovrebbe funzionare bene, ma le citazioni nella shell possono diventare complicate e non ho avuto la possibilità di testarle.
Chaskes

1

Una soluzione abbastanza user-friendly (cioè facile per i numpties come me) alla sfida della conversione da CSV a XML è quella di utilizzare un buon editor XML multipiattaforma che ha questa funzione integrata. (L'ho usato sia su Ubuntu che su Mac OSX 10.10.5; ha anche un eseguibile di Windows.)

XMLSpear

Come accennato, è un editor XML, ma include "import" da CSV a XML (e da Excel a XML) nel suo menu principale:

inserisci qui la descrizione dell'immagine

Ha convertito un file CSV da 31 Mb per me (un dump da un database di libreria di 20.000 voci) in circa 15 secondi, dandomi un file XML ben formato da salvare e manipolare.

Come editor ha molte altre funzioni di benvenuto (dettagliate al link sopra). Non riesco a trovare alcuna menzione di alcuna licenza per questo, ma questo è incluso nel "README":

XMLSpear è un software gratuito per uso personale.
Invia i tuoi commenti a xmlspear@donkeydevelopment.com o sul forum http://donkeydevelopment.com/forums.

L'uso commerciale deve essere approvato da donkeydevelopment.
Basta inviare un'e-mail a xmlspear@donkeydevelopment.com con oggetto "richiesta di licenza".

Il file Leggimi include anche utili contenuti per un file .desktop.

Fa bene il mio lavoro con Ubuntu 18.04 LTS (Gnome).



0

Suggerirei a te o qualcuno di scrivere codici in Python. Python è facile da imparare e risolvere facilmente il tuo problema. Ha sia il modulo CSV che i moduli XML . Il mio suggerimento prende in considerazione che potrebbe essere necessario avere i propri nomi per gli elementi XML o avere altri requisiti complessi (come la conversione dell'ultima colonna CSV in attributo dell'ultima ma una colonna).

Ci sono tonnellate di tutorial online su Python.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.