XML zu CSV konvertieren
Michael
- xml
Hallo!
Hab mal einegrundsätzliche Frage.
Ist es möglich aus einer XML Datei eine
CSV Datei zu schreiben?
Wie würde das grundsätzlich funktionieren?
Danke!
Hi,
Ist es möglich aus einer XML Datei eine
CSV Datei zu schreiben?
eine oder mehrere. Jedes XML lässt sich in ein DB-Schema übertragen; jede DB-_Tabelle_ lässt sich als CSV exportieren.
Cheatah
Hallo,
Hab mal einegrundsätzliche Frage.
Ist es möglich aus einer XML Datei eine
CSV Datei zu schreiben?
Ja, via XSLT mit der Ausgabemethode text.
Wie würde das grundsätzlich funktionieren?
Beispiel:
daten.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<daten>
<datensatz>
<x>1</x><y>1</y>
</datensatz>
<datensatz>
<x>2</x><y>4</y>
</datensatz>
<datensatz>
<x>3</x><y>9</y>
</datensatz>
</daten>
daten.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="text"
encoding="ISO-8859-1"
media-type="text/plain"
/>
<xsl:template match="/">
<xsl:for-each select="daten/datensatz">
<xsl:value-of select="x"/>xsl:text,</xsl:text><xsl:value-of select="y"/>xsl:text </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Ergebnis daten.csv mit SAXON:
saxon -o daten.csv daten.xml daten.xsl
1,1
2,4
3,9
MfG, Thomas
Hi Michael,
Ist es möglich aus einer XML Datei eine
CSV Datei zu schreiben?
syntaktisch ist das kein Problem - semantisch schon eher. Denn XML erlaubt Dir, geschachtelte Strukturen zu besitzen; CSV dagegen lebt eher davon, lineare Strukturen zu beschreiben.
Du hast also im Prinzip zwei Möglichkeiten:
a) Du brichst Deine komplexen Strukturen in viele einzelne Strukturen auf und generierst entsprechend viele CSV-Dateien (so, wie Du beispielsweise in einer relationalen Datenbank einzelne Tabellen definieren würdest, um diese Daten zu modellieren).
Nachteil: Die durch Schachtelung implizit repräsentierten Beziehungen zwischen den Datenelementen gehen verloren bzw. müssen durch zusätzliche Konstrukte (Fremdschlüssel etc.) mühsam nachgebildet werden (um beispielsweise später über SQL-JOINs die entsprechenden Bezüge wieder herstellen zu können).
b) Du "mißbrauchst" CSV derart, daß die komma-separierten Bestandteile einer jeden Zeile nicht skalar sind, sondern Strukturen beschreiben _können_. Eine von vielen möglichen Codierungsformen für etwas Derartiges wäre eine Klammerstruktur - so, wie Du das bei (arithmetischen oder logischen) Ausdrücken kennst, wo ja auch eine Baumstruktur durch eine lineare Zeichenkette repräsentiert wird. Eine solche Darstellung ist für Menschen ziemlich schlecht lesbar (hast Du schon mal ein LISP-Programm gesehen?), aber sie würde Deine Aufgabenstellung lösen.
Mist, wieso gibt es hier keine Posting-Kategorie "(INFORMATIK)" ... ;-)
Viele Grüße
Michael
... Nachtrag:
b) Du "mißbrauchst" CSV derart, daß die komma-separierten Bestandteile einer jeden Zeile nicht skalar sind, sondern Strukturen beschreiben _können_.
auf solchen Ideen basieren u. a. wesentliche Standards aus der Prä-XML-Zeit, beispielsweise
http://www.edifactory.de/ISO9735.txt.
Und für eine entsprechende Umsetzung hat Google mir gerade http://www.xml-edifact.org/ spendiert ...
Viele Grüße
Michael
Hi,
Hab mal einegrundsätzliche Frage.
Ist es möglich aus einer XML Datei eine
CSV Datei zu schreiben?
Wie würde das grundsätzlich funktionieren?
'CSV'-Dateien sind "normale" Listen. 'XML'-Dokumente sind Listen, die auch Listen beinhalten duerfen.
Du muesstest also ggf. ein 'XML'-Dokument in mehrere 'CSV'-Dateien "exportieren". Oder Du nimmst Dir nur einen "Bereich" des XML-Dokuments und exportierst diesen in eine Liste, soz. "1:1".
Gruss,
Lude
Hi Michael,
Hab mal einegrundsätzliche Frage.
Ist es möglich aus einer XML Datei eine
CSV Datei zu schreiben?
wir hatten hier im Büro vorhin eine Diskussion zu einem prinzipiell identischen Problem.
Im Wesentlichen ist Deine Frage äquivalent zur Frage: "Kann ich Schlüsselwortparameter eines Programmaufrufes durch Stellungsparameter eines modifizierten Programms ersetzen?"
In beiden Fällen lautet die Antwort ungefähr: "Warum solltest Du das tun wollen? Wenn die Ziel-Codierung semantisch angemessen wäre, dann wäre die Verwendung der Start-Codierung Overkill gewesen."
Beide Arten der Codierungen sind für so unterschiedliche Semantiken ausgelegt, daß eine Übersetzung zwischen ihnen in den meisten Fällen wenig Sinn macht.
Viele Grüße
Michael
Hallo,
In beiden Fällen lautet die Antwort ungefähr: "Warum solltest Du das tun wollen? Wenn die Ziel-Codierung semantisch angemessen wäre, dann wäre die Verwendung der Start-Codierung Overkill gewesen."
Beide Arten der Codierungen sind für so unterschiedliche Semantiken ausgelegt, daß eine Übersetzung zwischen ihnen in den meisten Fällen wenig Sinn macht.
Ich vermute mal, dass der Fragesteller nicht darauf aus war, eine komplexe XML-Struktur in einer flachen CSV-Liste abzubilden.
BTW:
Mein XSLT-Ansatz zielte auf einen praktischen Aspekt ab, der vielleicht hier auch so oder aehnlich gelagert ist.
Der XML-Datensatz war grob der Struktur einer Messdatendatei (z. B. des Programms LabView) angelehnt (hier einfache x-, y-Daten). Nun kann aber nicht jedes Grafikprogramm XML-Code einlesen, um eine Kurve fuer Print-Zwecke zu produzieren. Fuer das Programm TechPlot (Erstellung von wiss. Grafiken, incl. PS-Export) brauche ich wiederum eine mit Leerzeichen oder Kommata getrennte Liste (x,y fuer 2D- oder x,y,z fuer 3D-Plots).
Fuer eine solche Datenkonvertierung ist das von mir genannte Vorgehen praktisch, zumal mit einem zweiten XSL-Stylesheet noch die Ausgabe der Kurven als SVG-Dokumente (mittels polyline) erfolgt.
MfG, Thomas