Kurz gesagt
CSV ist flach, XML ist ein Baum. Flache Listen gleichartiger Datensätze lassen sich sauber umwandeln. Verschachtelte Elemente werden per Punkt-Notation zu Spalten, etwa adresse.stadt. Wiederholte Kindknoten werden zu einem Feld verbunden, optionale Felder erzeugen leere Zellen. Was eine Tabelle nicht abbilden kann, etwa gemischter Inhalt oder Kommentare, geht verloren. Mit etwas Vorbereitung der XML wird das Ergebnis deutlich besser.
Warum CSV flach ist und XML ein Baum
Eine CSV-Datei ist eine zweidimensionale Tabelle: Zeilen und Spalten, mehr nicht. Jede Zelle enthält genau einen Wert. XML dagegen ist hierarchisch aufgebaut. Ein Element kann beliebig viele Kind-Elemente enthalten, diese wiederum eigene Kinder, und das in beliebiger Tiefe. Daraus entsteht der grundlegende Konflikt beim Umwandeln: Man möchte einen Baum in eine Tabelle pressen. Das geht gut, solange der Baum flach und regelmäßig ist, und es wird schwierig, je tiefer und unregelmäßiger er wird. Den grundlegenden Unterschied beider Formate vertieft der Ratgeber CSV vs. XML: der Unterschied.
Was sauber funktioniert
Am besten gelingt die Umwandlung bei einer flachen Liste gleichartiger Datensätze. Das ist der typische Fall: Ein Root-Element enthält viele gleichnamige Kind-Elemente, und jedes davon hat einfache Werte als Inhalt. Diese Struktur entspricht fast eins zu eins einer Tabelle. Jedes wiederholte Element wird zu einer Zeile, jedes seiner Felder zu einer Spalte. Hier gibt es keinen Informationsverlust.
Man kann sich das gut bildlich vorstellen. Eine flache, gut umwandelbare XML hat genau drei Ebenen: ganz oben das Wurzelelement, darunter die wiederholten Datensätze und darunter einfache Felder mit reinem Text. Sobald eine vierte oder fünfte Ebene hinzukommt, wenn also ein Feld selbst wieder aus mehreren Unterfeldern besteht, beginnt die eigentliche Arbeit der Umwandlung. Solange diese Verschachtelung regelmäßig ist, also in jedem Datensatz gleich aufgebaut, bleibt das Ergebnis sauber und nachvollziehbar. Unregelmäßig wird es erst, wenn manche Datensätze tiefer verschachtelt sind als andere oder wenn Felder mal als einzelnes Element, mal als Liste auftreten. Genau an diesen Stellen muss die Umwandlung Entscheidungen treffen, die nicht immer verlustfrei sind.
Flattening per Punkt-Notation
Sobald ein Datensatz selbst verschachtelte Elemente enthält, kommt das Flattening ins Spiel. Verschachtelte Elemente werden über ihren Pfad zu einem Spaltennamen verbunden, getrennt durch einen Punkt. Aus dem Element stadt innerhalb von adresse wird die Spalte adresse.stadt. Ein Beispiel: Dieses verschachtelte XML
<kunden>
<kunde>
<name>Anna Berg</name>
<adresse>
<strasse>Hauptweg 3</strasse>
<stadt>Kiel</stadt>
</adresse>
</kunde>
</kunden> wird zu dieser flachen CSV:
name,adresse.strasse,adresse.stadt
Anna Berg,Hauptweg 3,Kiel So bleibt die ganze Information erhalten, nur eben in einer flachen Form. Aus dem Spaltennamen lässt sich die ursprüngliche Hierarchie noch ablesen.
Wiederholte Kindknoten
Schwieriger wird es, wenn innerhalb eines Datensatzes mehrere gleichnamige Elemente vorkommen, etwa drei telefon-Einträge bei einem Kunden. Eine Tabelle hat pro Datensatz nur eine Zelle je Spalte. Den dritten Wert separat unterzubringen, ohne die Spaltenstruktur zu sprengen, ist nicht ohne Weiteres möglich. Der Konverter verbindet die Werte deshalb üblicherweise zu einem Feld. Wer jeden Einzelwert getrennt braucht, sollte das XML vorab umstrukturieren oder einen Programmieransatz wählen.
Es gibt für dieses Problem grundsätzlich zwei denkbare Strategien, und beide haben einen Haken. Die erste verbindet alle Werte einer wiederholten Gruppe zu einem einzigen Zellinhalt, getrennt etwa durch ein Komma oder einen senkrechten Strich. Das ist platzsparend, aber die Einzelwerte sind danach nur noch durch erneutes Auftrennen zu gewinnen. Die zweite Strategie würde für jeden möglichen Wiederholungswert eine eigene Spalte anlegen, also telefon_1, telefon_2 und so weiter. Das ist sauberer, funktioniert aber nur, wenn die Höchstzahl der Wiederholungen bekannt und nicht zu groß ist, sonst entstehen viele leere Spalten. Welche Variante passt, hängt davon ab, was du mit der CSV anschließend vorhast. Für eine reine Sichtprüfung reicht die verbundene Form, für eine maschinelle Weiterverarbeitung sind getrennte Spalten meist besser.
Spalten-Union über alle Datensätze
XML erlaubt optionale Elemente. Ein Datensatz hat ein Feld, ein anderer nicht. Eine Tabelle braucht aber für alle Zeilen dieselben Spalten. Der Konverter bildet deshalb die Vereinigung aller Felder über sämtliche Datensätze und legt für jedes je gesehene Feld eine Spalte an. Fehlt das Feld bei einem Datensatz, bleibt dessen Zelle leer. Leere Zellen sind in solchen Fällen also normal und korrekt, kein Hinweis auf einen Fehler.
Was verloren geht
Ehrlich gesagt kann eine flache Tabelle nicht alles abbilden, was XML ausdrückt. Diese Dinge gehen bei der Umwandlung typischerweise verloren:
- Mixed Content: Elemente, die Text und weitere Elemente vermischen, lassen sich nicht sauber in eine Zelle pressen.
- XML-Kommentare und Verarbeitungsanweisungen enthalten keine Daten und werden ignoriert.
- Sehr tiefe Verschachtelung führt zu unhandlich langen Spaltennamen, einzelne Ebenen können zusammenfallen.
- Reihenfolge-Information bei wiederholten Knoten geht verloren, sobald Werte zu einem Feld verbunden werden.
Reine Datenwerte, also der Inhalt einfacher Elemente, bleiben dagegen vollständig erhalten. Für den umgekehrten Weg von CSV zu XML hilft der Ratgeber XML in CSV umwandeln.
Wie das Tool den Datensatz erkennt
Damit die Umwandlung weiß, was eine Zeile ist, sucht der Konverter nach dem ersten wiederholten Element unter dem Root. Findet er unter dem Wurzelelement mehrere gleichnamige Kind-Elemente, behandelt er diese als die Datensätze, also als Zeilen der Tabelle. Alles, was darunter liegt, wird zu Spalten geflacht. Diese Heuristik trifft den häufigsten Fall gut. Bei ungewöhnlich aufgebauten Dateien lohnt ein Blick auf das Ergebnis, ob die richtige Ebene als Zeile erkannt wurde.
Tipps zum Vorbereiten der XML
Mit ein wenig Vorarbeit wird das Ergebnis spürbar sauberer. Stelle sicher, dass es eine klare, wiederholte Datensatz-Ebene gibt. Vermeide gemischten Inhalt und entferne überflüssige Verschachtelung, die du in der Tabelle nicht brauchst. Wenn wiederholte Werte wichtig sind, überlege, ob du sie vorab in eindeutige Felder wie telefon_1 und telefon_2 aufteilst. Probiere die Umwandlung danach im CSV-zu-XML-Konverter aus, der auch den umgekehrten Weg von XML zu CSV beherrscht, komplett im Browser und ohne Upload.
Häufige Fragen
Kann man verschachteltes XML in CSV umwandeln?
Ja, mit Einschränkungen. Flache Listen gelingen verlustfrei, verschachtelte Elemente werden per Punkt-Notation zu Spalten geflacht.
Was bedeutet Flattening?
Eine verschachtelte Struktur wird in eine flache Tabelle überführt. Pfade werden zu Spaltennamen verbunden, etwa adresse.stadt.
Warum sind manche Zellen leer?
Weil die CSV die Vereinigung aller Felder bildet. Optionale Elemente, die nur manche Datensätze haben, erzeugen bei den anderen leere Zellen.
Was geht verloren?
Gemischter Inhalt, Kommentare, Verarbeitungsanweisungen und die genaue Reihenfolge wiederholter Knoten. Reine Datenwerte bleiben erhalten.