Zum Hauptinhalt springen

XML zu CSV

Dieser Konverter wandelt XML in RFC 4180 CSV in Ihrem Browser um. Die wiederholten untergeordneten Elemente des Root-Elements werden zu Zeilen, ihre Attribute zu @-präfigierten Spalten, und der Elementtext landet in benannten Spalten mit CRLF-Zeilenumbrüchen und Anführungszeichen nur dort, wo die Grammatik es erfordert. Nichts wird hochgeladen.

Nur lokal

XML zu CSV erklärt

Die meisten realen XML-Dateien, die sich wie eine Tabelle verhalten, teilen eine Form: ein Container-Element, das viele gleichnamige untergeordnete Elemente enthält, wobei jedes untergeordnete Element für einen Datensatz steht – ein Katalog von Büchern, ein Protokoll von Einträgen, eine Liste von Bestellungen. Dieser Konverter sucht genau nach dieser Form. Er findet das wiederholte untergeordnete Element des Root-Elements und der Rest ist mechanisch: jedes untergeordnete Element wird zu einer Zeile, seine Attribute und inneren Elemente werden zu Spalten, und die Vereinigung aller Spalten über alle Zeilen hinweg wird zur Überschrift, in der Reihenfolge, in der sie zum ersten Mal gesehen wurden.

Die Konventionen sind die, die jeder XML-Brücken verwendet, und sie sind hier explizit gemacht: ein Attribut behält seinen Namen, erhält aber ein @-Präfix, also id="bk101" wird zur @id-Spalte; der Text eines Elements wird zu seinem #text-Wert; und ein untergeordnetes Element, das in einem Datensatz wiederholt wird, explodiert zu indizierten Spalten, anstatt stillschweigend zusammengeführt zu werden. Die CSV-Seite ist strikt RFC 4180 – CRLF-Zeilenumbrüche, doppelte Anführungszeichen nur dann, wenn ein Feld ein Komma, ein Anführungszeichen oder einen Zeilenumbruch enthält – und Werte werden unverändert übernommen, ohne eine numerische Umwandlung zur Neuformatierung einer Postleitzahl.

Alles läuft in diesem Browser-Tab. Die XML wird von einer In-Page-Engine geparst und die CSV wird aus dem geparsten Baum erstellt; beide berühren kein Netzwerk – öffnen Sie DevTools, beobachten Sie, wie das Network-Panel stumm bleibt, und die Behauptung bestätigt sich selbst.

Erstellen Sie stattdessen das XML aus einem Tabellenkalkulations-Export? Der CSV in XML Konverter wendet diese Konventionen in die umgekehrte Richtung an.

Was die CSV-Seite garantiert – Anführungszeichen, CRLF, verdoppelte Anführungszeichen – ist ordnungsgemäß in der RFC 4180 Anleitung auf dieser Seite beschrieben.

Wie die Konvertierung tatsächlich funktioniert

Das Dokument wird einmal in einen Baum tokenisiert, dann ist das tabellarische Lesen ein separater, ehrlicher Schritt: der Baum hat entweder die Form der wiederholten untergeordneten Elemente oder nicht, und etwas anderes vorzutäuschen würde eine CSV erzeugen, die gut aussieht, aber etwas anderes bedeutet. Wenn die Form gefunden wird, wird jeder Datensatz zu Pfadblättern abgeflacht, und die Zeilenüberschrift ist die geordnete Vereinigung dieser Pfade über alle Datensätze hinweg – zuerst gesehen zuerst, also ist die Spaltenreihenfolge stabil und vorhersehbar, anstatt zufällig alphabetisch zu sein.

  • Parsen: ein Ein-Durchlauf-Tokenizer erstellt den Elementbaum; Kommentare, DOCTYPE und Verarbeitungsanweisungen werden übersprungen, und ein zweites Root-Element wird mit einer Zeilennummer abgelehnt.
  • Auswählen: das erste wiederholte untergeordnete Element des Root-Elements liefert die Zeilen – <catalog> voller <book>- untergeordneter Elemente ist der klassische Fall.
  • Abflachen: Attribute werden zu @Spalten, Elementtext wird zu #text, und tiefere Verschachtelung wird zu Punktpfaden wie author.#text.
  • Ausgeben: eine CRLF-beendete Zeile pro Datensatz, Felder werden nur dann in Anführungszeichen gesetzt, wenn ein Komma, Anführungszeichen oder Zeilenumbruch es erfordert.

Wie XML-Features zu Spalten werden

XML hat drei Möglichkeiten, einen Wert zu transportieren – Attribute, Textinhalt und untergeordnete Elemente – und ein flaches Gitter hat eine: eine benannte Spalte. Die folgende Zuordnung ist die Standardzuordnung, die so gewählt wurde, dass keine beiden Features der Quelle im Kollision im Ausgabe kollidieren können und die Überschrift selbst Ihnen sagt, welche Art von Wert jede Spalte stammte.

XML-KonstruktSpalteBeispielzelle
Attribut id="bk101"@idbk101
Elementtext <price>5.95</price>price.#text5.95
Element mit Attributen und Text@sku plus #textA-1, Widget
Wiederholte Enkelkinderbook[0].#text, book[1].#texteins, zwei

Werte werden unvermittelt übernommen

Es gibt keinen Typinferenzschritt zwischen dem XML-Baum und der CSV, absichtlich. XML-Text ist Text, also 44.95 als Zeichen 44.95 ankommt, eine Postleitzahl ihre führende Null behält und ein Wert wie 1e5 nicht zu 100000 erweitert wird. Entitäten werden auf die gleiche Weise durchgelassen: der Parser ist kein validierender Parser und schreibt keine Entitätsreferenzen um, also landet in einer Zelle genau das, was der Quelltext enthielt. Wenn das Ziel typisierte Werte benötigt, kombinieren Sie dieses Tool mit dem CSV zu SQL Konverter, der die Typen zu diesem Zeitpunkt aus den Zellen ableitet, wo die Wahl sichtbar und umkehrbar ist.

  • Zahlen behalten ihre genauen Zeichen – keine Genauigkeit wird erfunden oder verloren.
  • Whitespace innerhalb eines Textknotens wird beibehalten; Whitespace zwischen Elementen wird nie zu Daten.
  • Leere Elemente (<debug/>) erzeugen eine Spalte mit einer leeren Zelle, anstatt zu verschwinden.

Wo dieser Konverter sich weigert zu raten

Zwei Strukturen würden den Konverter zwingen, Informationen zu erfinden, und beide werden mit einer bestimmten Nachricht abgelehnt. Die erste ist ein Dokument ohne wiederholtes untergeordnetes Element – ein einzelnes Root, das nichts Tabulares enthält, kann nicht ohne die Erfindung einer Zeilenform zu Zeilen werden. Die zweite ist ein Dokument mit mehr als einem Root-Element, was überhaupt kein einziges Dokument ist; der Fehler nennt das störende zweite Element und seine Zeile, und nichts wird geschrieben. Ein Fragment, das fast passt, ist immer noch ein Fragment, und der schnellste Fix ist, das Wrapper-Element zu löschen oder umzubenennen, bevor Sie einfügen.

  • Keine wiederholten untergeordneten Elemente: Fehler, der die erwartete <root><item>…</item></root>-Form benennt.
  • Mehrere Root-Elemente: abgelehnt, mit dem zweiten Element und seiner Zeile gemeldet.
  • Nicht übereinstimmende schließende Tags: abgelehnt, an dem Punkt, an dem der Baum nicht wohlgeformt ist.

Häufig gestellte Fragen

Lädt das Konvertieren von XML in CSV meine Datei irgendwo hoch?

Nein. Das XML-Parsen und das CSV-Erstellen finden beide innerhalb dieses Browser-Tabs mit JavaScript statt, das einmal geladen wurde, als die Seite geöffnet wurde. Es gibt keine API-Route, um Daten zu senden, und die Content-Security-Policy der Seite setzt connect-src 'self', also würde der Browser selbst jede ausgehende Anfrage blockieren. Beide Behauptungen sind in DevTools überprüfbar: beobachten Sie das Network-Panel während der Konvertierung – es erscheint keine Anfrage.

Welche XML-Elemente werden zu CSV-Zeilen?

Der Konverter betrachtet die untergeordneten Elemente des Root-Elements und nimmt das wiederholte – das gleichnamige Element, das viele Mal vorkommt, wie <book> innerhalb von <catalog>. Jedes Vorkommen wird zu einer Zeile. Wenn kein untergeordnetes Element sich wiederholt, wird jedes objektartige untergeordnete Element als eigener Datensatz behandelt, und ein Root mit nichts Tabular darin wird mit einem benannten Fehler abgelehnt, anstatt in eine irreführende einzeilige Datei abgeflacht zu werden.

Warum beginnen manche Spaltennamen mit @ oder enthalten #text?

Die Präfixe zeichnen auf, wo jeder Wert im XML lebte. Ein @-Präfix markiert ein Attribut – id="bk101" wird zur @id-Spalte – und #text markiert den eigenen Text eines Elements, der einen eigenen Namen braucht, wenn das Element auch Attribute oder untergeordnete Elemente hat. Die Präfixe verhindern Kollisionen: ein Element namens id und ein Attribut namens id würden sonst um eine Spalte kämpfen, und die Überschrift würde nicht sagen, welches welches war.

Werden Zahlen konvertiert, oder bleiben Werte wie geschrieben?

Werte bleiben genau wie geschrieben. Der Baum behält Text als Strings und der CSV-Schreiber führt keine Typinferenz durch, also 44.95 wird als 44.95 übertragen, eine Postleitzahl wie 02134 behält ihre führende Null, und nichts wird im Hintergrund neu formatiert. Dies ist die gleiche Richtlinie, die der XML zu YAML Konverter der Seite folgt, also zeigt eine Datei, die auf eine Weise oder die andere konvertiert wird, die gleichen Zeichen für Zeichen.

Wie werden in der Ausgabe in Anführungszeichen gesetzte Felder und Zeilenumbrüche behandelt?

Gemäß RFC 4180: ein Feld, das ein Komma, ein doppeltes Anführungszeichen oder einen Zeilenumbruch enthält, wird in doppelte Anführungszeichen gesetzt, und ein Anführungszeichen in einem solchen Feld wird verdoppelt. Zeilen enden mit CRLF, dem Trennzeichen, das die Spezifikation definiert und das Tabellenkalkulations-Software erwartet. Felder werden nur dann in Anführungszeichen gesetzt, wenn die Grammatik es erfordert – keine dekorativen Anführungszeichen – was die Datei kleiner und einfacher zu diffen als ein Export, bei dem alles in Anführungszeichen gesetzt ist.

Was passiert mit XML-Kommentaren und der DOCTYPE-Zeile?

Sie werden übersprungen. Kommentare, die DOCTYPE-Deklaration und Verarbeitungsanweisungen enthalten keine tabularen Daten, also der Baum enthält sie einfach nie; das Parsen setzt von der Elementstruktur fort. Das Einzige, worauf der Konverter besteht, ist ein einzelnes Root-Element – ein Dokument mit einem zweiten Top-Level-Element wird mit dem Elementnamen und der Zeilennummer abgelehnt, weil zwei Root-Elemente zwei Dokumente sind, nicht eine Zeilensammlung.