Wie kann ich eine CSV-Datei in XML konvertieren?

8

Wie kann ich eine CSV-Datei in XML konvertieren?

Gibt es eine Software für Ubuntu?

Vitor Mazuco
quelle
Ich verstehe nicht Die drei Formate, die Sie erwähnen, sind reine Textdateien - der Unterschied liegt im Inhalt. Und Umfang. Würde es Ihnen etwas ausmachen, ein Beispiel hinzuzufügen?
Rmano
1
Abstimmung zur Wiedereröffnung. Ich halte das für ziemlich einfach und leicht zu beantworten ;-)
Rinzwind
1
Ich unterstütze Rinzwind, weil ich gerade die Software gefragt habe, die konvertieren kann.
Vitor Mazuco

Antworten:

7

Auf der Community-Website zum Konvertieren befindet sich ein Link zu einem Befehlszeilentool namens csv2xml . Da es nicht gewartet wird, möchten Sie möglicherweise eine andere Option auswählen.

Es wird auch ein Java-Tool namens csv2xml (Warnung: Website ist auf Deutsch) und ein Befehlszeilen-Tool namens ff-extractor erwähnt .

Der Link enthält auch Verweise auf Python, Perl, PHP, XSLT. Dies bedeutet jedoch, dass Sie den Konverter selbst codieren müssen.

Rinzwind
quelle
1
Ich habe ein wenig mit den Referenzen im 1. Link aktualisiert. Es gibt auch ein kommerzielles Produkt namens Altova ( altova.com ).
Rinzwind
10

Wenn Sie das Format der csvDatei und die Struktur kennen, die Sie in der xmlDatei benötigen , ist es ziemlich einfach, ein Skript zu erstellen, das die Konvertierung handhaben kann.

Nimm die Datei simple.csv:

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

Sie können die folgende xmlDatei erstellen :

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

Mit folgendem Skript:

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

Selbst wenn Sie noch nie zuvor codiert haben, sollte dies meiner Meinung nach einfach zu verwenden und zu ändern sein. Die Datei wird zeilenweise in der whileSchleife gelesen .

IFSist der interne Feldspezifizierer. Das IFS=$','erklärt, dass der Wert des Feldtrennzeichens ein Komma ist. Dies ist Standard für eine CSV-Datei, kann jedoch nach Bedarf geändert werden, um dem Format der Eingabedatei zu entsprechen.

Das -rArgument für den readBefehl weist ihn an, Backslashes in Ihrer Datei als Teil Ihrer Daten und nicht als Escapezeichen für ein folgendes Sonderzeichen zu behandeln.

Das -a arryArgument platziert jede Spalte Ihrer Datei in einem Array (mit dem Namen arry). Die Spalten in diesem Beispiel sind Name, Alter, Land. Mit anderen Worten die Werte zwischen den Kommas. Jede Spalte in der Zeile wird also in einem Array gespeichert.

Dann wird der benötigte Text für xmlnur um die Werte gewickelt und die xmlZeile an die Ausgabedatei mit angehängt echo.

chaskes
quelle
@chaskes, wenn Sie die in der Zeile verwendete Option erläutern while IFS=$',' read -r -a arry , ist sie für eine andere nützlich. Vielen Dank.
Alhelal
@ BandaMuhammadAlHelal Fertig.
Chaskes
Wie würden Sie mit Kommas umgehen, die in Feldern erscheinen, die von doppelten Anführungszeichen umgeben sind? Wie "Somename, Jack"anstelle von Jackin der Eingabedatei?
Muk.li
1
@ muk.li Das Eingabefeldtrennzeichen (normalerweise ein Komma) wird an der Zeile beginnend markiert: während IFS = $ ','. Angenommen, das Trennzeichen ist ein Sternchen. Sie würden es einfach in $ '*' ändern. In Ihrem Fall sollte es also $ '"' sein (einfaches Anführungszeichen, doppeltes Anführungszeichen, einfaches Anführungszeichen). Dies sollte gut funktionieren, aber das Zitieren in der Shell kann schwierig werden, und ich hatte keine Gelegenheit, es zu testen.
Chaskes
1

Eine ziemlich benutzerfreundliche (dh für Leute wie mich einfach) Lösung für die Herausforderung der Konvertierung von CSV in XML besteht darin, einen netten plattformübergreifenden XML-Editor zu verwenden, in den diese Funktion integriert ist. (Ich habe es sowohl unter Ubuntu als auch unter Mac OSX 10.10.5 verwendet; es hat auch eine ausführbare Windows-Datei.)

XMLSpear

Wie bereits erwähnt, handelt es sich um einen XML-Editor, der jedoch im Hauptmenü den Import von CSV-zu-XML (und Excel-zu-XML) enthält:

Geben Sie hier die Bildbeschreibung ein

Es konvertierte eine 31-MB-CSV-Datei für mich (ein Speicherauszug aus einer Bibliotheksdatenbank mit 20.000 Einträgen) in ungefähr 15 Sekunden und gab mir eine wohlgeformte XML-Datei zum Speichern und Bearbeiten.

Als Redakteur hat es viele andere willkommene Funktionen (siehe Link oben). Ich kann keine Lizenz dafür erwähnen, aber diese ist in der "README" enthalten:

XMLSpear ist eine kostenlose Software für den persönlichen Gebrauch.
Bitte senden Sie Ihr Feedback an [email protected] oder im Forum http://donkeydevelopment.com/forums.

Die kommerzielle Nutzung muss von Donkeydevelopment genehmigt werden.
Senden Sie einfach eine E-Mail an [email protected] mit dem Betreff "Lizenzanfrage".

Die Readme-Datei enthält auch hilfreiche Informationen zum Inhalt einer .desktop-Datei.

Macht den Job gut für mich unter Ubuntu 18.04 LTS (Gnome).

Dɑvïd
quelle
0

Ich bin ein großer Fan BaseXdavon scheint eine Importfähigkeit zu haben:

http://docs.basex.org/wiki/CSV_Module


Könnte darauf hinweisen, dass es anscheinend einfacher ist, eine Webanwendung zu verwenden:

https://webapps.stackexchange.com/q/123959/24327

Dies entspricht einem Plugin oder einer Erweiterung des Browsers, der mit Google Sheets funktioniert.

Ich fühle deinen Schmerz, weil es ein scheinbar einfaches Dienstprogramm ist, das über apt verfügbar sein sollte.

Thufir
quelle
0

Ich würde vorschlagen, dass Sie oder jemand Codes in Python schreiben. Python ist leicht zu erlernen und löst Ihr Problem leicht. Es verfügt sowohl über CSV-Module als auch über XML-Module . Mein Vorschlag berücksichtigt, dass Sie möglicherweise Ihre eigenen Namen für XML-Elemente oder andere komplexe Anforderungen benötigen (z. B. die Konvertierung der letzten CSV-Spalte in das Attribut der vorletzten Spalte).

Es gibt unzählige Online-Tutorials zu Python.

Stefano Mtangoo
quelle