XML zu YAML
Dieser Konverter verwandelt ein XML-Dokument in Ihrem Browser in lesbare YAML. Attribute werden zu Schlüsseln, die mit @ beginnen, der Text eines Elements wird zu #text, wenn er mit Attributen oder Kind-Elementen geteilt wird, und wiederholte Geschwisterelemente werden zu YAML-Sequenzen. Werte bleiben Zeichenketten, also bleibt eine Postleitzahl intakt, und nichts wird hochgeladen.
XML zu YAML erklärt
XML trägt Werte an drei Stellen – in Attributen, Textinhalt und Kind-Elementen – und YAML hat für alle drei in einer Abbildung Platz, vorausgesetzt, jeder bekommt einen Namen, der nicht mit den anderen kollidieren kann. Das ist die gesamte Konvention, die dieser Konverter anwendet: id="bk101" wird zum Schlüssel "@id", der Text innerhalb eines Elements wird zu "#text", wenn er einen eigenen Zuordnungsspeicher braucht, und Kind-Elemente werden zu Schlüsseln, deren Werte Abbildungen oder Listen sind. Die Präfixe sehen wie Lärm aus, bis ein Element ein Attribut, ein Kind und Text gleichzeitig hat – dann sind sie der einzige Grund, warum die Rückkonvertierung verlustfrei sein kann.
Der YAML-Stil ist der Hausstil der Seite: Einrückung mit zwei Leerzeichen, Sequenzstriche ausgerichtet mit ihrem übergeordneten Schlüssel und nicht darunter eingerückt, und Anführungszeichen nur dort, wo die einfache Form missverstanden würde. Diese letzte Regel leistet hier echte Arbeit. XML-Text ist untypisiert, also ist 44.95 eine Zeichenkette, und der Ausgabegenerator schreibt sie als "44.95" genau deshalb, damit ein YAML-Parser nicht neu erkennt, dass es eine Zahl ist. Das Ergebnis ist ein Dokument, das rückwärts konvertiert werden kann: von XML zu YAML und zurück kommt es mit den gleichen Werten, den gleichen Attributen und der gleichen Struktur, mit der es begonnen hat.
Alles läuft in diesem Browser-Tab. Das XML wird von einer Seiteneinheit analysiert und das YAML wird aus dem analysierten Baum erzeugt; beide berühren kein Netzwerk – öffnen Sie DevTools, beobachten Sie, wie das Netzwerkpanel schweigt, und die Behauptung bestätigt sich selbst.
Um das Ergebnis zurück in die andere Richtung zu senden, der YAML zu XML-Konverter ehrt die gleichen @- und #text-Konventionen, sodass nichts manuell umbenannt werden muss.
Neu im Lesen von YAML-Ausgaben? Die YAML-Grundlagen-Anleitung erklärt Einrückung, Anführungszeichen und die Skalarregeln, die der Ausgabegenerator befolgt.
Wie die Konvertierung tatsächlich funktioniert
Das Dokument wird einmal in einen Baum aus Elementen, Attributen und Text tokenisiert, und der YAML-Ausgabegenerator sieht nur diesen Baum – also können Formatierungsbesonderheiten in der Quelle (uneinheitliche Einrückung, über Zeilen verteilte Attribute) nicht in die Ausgabe durchsickern. Der Baum passt entweder zu einem Dokument mit einem Wurzelelement oder nicht, und der Konverter sagt, welches.
- Analysieren: Ein Ein-Pass-Tokenizer liest Elemente, Attribute, Text, Kommentare und CDATA; nicht übereinstimmende oder nicht geschlossene Tags werden mit einer Zeilennummer verworfen.
- Konvertieren: Jedes Element wird zu einer Abbildung – Attribute als "@Schlüssel"-Einträge, Text als "#text", Kind-Elemente als verschachtelte Schlüssel.
- Sammeln: Wiederholte Geschwisterelemente werden zu einer Liste zusammengefasst, sodass zehn <book>-Vorkommen eine Zehner-Sequence werden.
- Ausgeben: Der Baum wird als YAML mit zweifacher Leerzeichen-Einrückung serialisiert, mit Anführungszeichen nur dort, wo ein Wert sonst missverstanden würde.
Wie XML-Merkmale in YAML landen
Jedes Merkmal des Quelldokuments hat einen reservierten Platz in der Ausgabe, und die Plätze werden so gewählt, dass zwei Merkmale nie um einen Schlüssel kämpfen können. Die Tabelle zeigt die Abbildung auf die Formen, die in echten Dokumenten tatsächlich vorkommen – ein Element mit Attribut, ein Element mit Kind-Elementen, ein sich wiederholendes Element.
| XML-Konstrukt | Erzeugtes YAML |
|---|---|
| <book id="bk101"> | eine book-Abbildung mit "@id": bk101 |
| <price>44.95</price> | price mit "#text": "44.95" |
| zehn <book>-Geschwisterelemente | ein book-Schlüssel, dessen Wert eine Zehner-Liste ist |
| <debug/> (leer) | debug: {} – vorhanden, explizit leer |
Warum #text existiert und wann er erscheint
Ein Element, dessen Inhalt nur Text ist – <price>44.95</price> – könnte zur einfachen Abbildung price: 44.95 werden, und für Elemente ohne Attribute und ohne Kind-Elemente ist das im Wesentlichen das, was Sie zum Lesen erhalten. Aber sobald ein Element auch ein Attribut oder ein Kind trägt, braucht sein Text einen Schlüssel, den kein Attributname und kein Kind-Elementname je belegen kann. #text ist dieser Schlüssel. Er erscheint nur, wenn Text sein Element mit etwas anderem teilen muss, was die normale Ausgabe sauber hält und die komplexe Ausgabe eindeutig macht.
- Text-Elemente halten ihren Inhalt auf einer Zeile lesbar.
- Gemischte Elemente – Attribute plus Text, oder Kind-Elemente plus Text – verschieben den Text unter "#text".
- Entitäten im Quelltext werden wörtlich übernommen; der Parser ist kein validierender Parser und schreibt sie nicht um.
Werte, Typen und die verlustfreie Rückkonvertierungsgarantie
XML-Text ist Zeichenketten, und der Ausgabegenerator behandelt ihn als solche: nichts wird auf dem Weg zu einer Zahl oder einem Boole'schen Wert umgewandelt. Die sichtbare Folge ist die Anführungszeichen – 44.95 wird als "44.95" geschrieben, weil ein unzitiertes 44.95 in YAML als Zahl neu gelesen würde, und eine Postleitzahl wie 02134 würde ihre führende Null auf die gleiche Weise verlieren. Werte, die nicht mit etwas anderem verwechselt werden können, wie bk101, werden unzitiert ausgegeben. Wandeln Sie das Ergebnis mit dem YAML-zu-XML-Konverter der Seite zurück, und das Dokument, das Sie erhalten, ist das Dokument, mit dem Sie begonnen haben, Byte für Byte dort, wo es zählt: Namen, Attribute, Text und Struktur.
- Keine Typinferenz: Text wird als Text übertragen, also bleiben Präzision und führende Nullen erhalten.
- Zahlen-ähnliche Zeichenketten werden bei der Ausgabe zitiert, was die verlustfreie Rückkonvertierung ermöglicht.
- Whitespace innerhalb eines Textknotens wird erhalten; Whitespace zwischen Elementen wird nie zu Daten.
Häufig gestellte Fragen
Lädt das Konvertieren von XML zu YAML mein Dokument irgendwo hoch?
Nein. Sowohl die Analyse als auch die YAML-Erzeugung laufen in diesem Browser-Tab mit Code, der einmal beim Öffnen der Seite geladen wurde. Es gibt keinen Upload-Endpunkt, und die Seite wird mit einer Content-Security-Policy ausgeliefert, deren connect-src 'self' ist, also würde der Browser jegliche ausgehende Anfrage ablehnen, unabhängig vom Code. Beobachten Sie das Netzwerkpanel in DevTools während der Konvertierung – es bleibt schweigend, und das ist die nachprüfbare Version dieser Zusage.
Was bedeuten die @- und #text-Präfixe in der Ausgabe?
Sie zeichnen auf, woher jeder Wert im XML stammt. Ein Schlüssel wie "@id" enthält ein Attribut – id="bk101" in der Quelle – und "#text" enthält den eigenen Text eines Elements, wenn dieses auch Attribute oder Kind-Elemente hat. Die Präfixe garantieren keine Kollision: Ein Attribut namens price und ein Kind-Element namens price können nicht beide auf denselben Schlüssel abgebildet werden, und der YAML-Leser kann immer erkennen, welche Art von Wert er betrachtet.
Wie werden wiederholte Elemente behandelt?
Geschwisterelemente mit gleichem Namen werden zu einer YAML-Sequence zusammengefasst: zehn <book>-Kind-Elemente werden zu einem einzigen book-Schlüssel, dessen Wert eine Zehner-Liste ist, in Dokumentenreihenfolge. Elemente, die einmal vorkommen, bleiben einfache Abbildungen. Das ist die Standardkonvention für XML-zu-Daten-Konvertierung, und es ist das, was die Ausgabe natürlich zum Iterieren im Code macht – jedes Listenelement ist ein Datensatz mit Attributen und Kind-Elementen darin.
Warum wird 44.95 in der YAML-Ausgabe in Anführungszeichen geschrieben?
Weil XML-Text untypisiert ist, ist der Wert die Zeichenkette 44.95 – und ein unzitiertes 44.95 in YAML würde von jedem nachgelagerten Parser als Zahl neu gelesen werden. Zahlen-ähnliche Zeichenketten zu zitieren ist die Art des Ausgabegenerators, zu erhalten, was die Quelle tatsächlich gesagt hat, und es ist dieselbe Regel, die eine Postleitzahl wie 02134 daran hindert, ihre führende Null zu verlieren. Werte, die nicht missverstanden werden können, wie bk101, werden ohne Anführungszeichen ausgegeben.
Welche Teile des XML-Dokuments werden ignoriert?
Kommentare, die DOCTYPE-Deklaration und Verarbeitungsanweisungen werden übersprungen, da sie keine Elementdaten tragen. Alles Strukturale wird erhalten: Elemente, Attribute, Text und CDATA-Abschnitte. Der Konverter erfordert ein einziges Wurzelelement – ein Einfügen mit zwei obersten Elementen wird mit dem Namen und der Zeilennummer des zweiten Elements verworfen, da zwei Wurzeln zwei Dokumente sind und sie stumm zu verschmelzen eine Struktur erfinden würde, die nie dagewesen ist.
Was passiert mit leeren Elementen wie <debug/>?
Ein leeres Element wird zu einer explizit leeren Abbildung – debug: {} – anstatt zu verschwinden, sodass der Schlüssel erhalten bleibt und ein Verbraucher weiterhin erkennen kann, dass das Feld im Dokument war. Ein Element, das mit separaten öffnenden und schließenden Tags, aber ohne Inhalt geschrieben wurde, <note></note>, landet an derselben Stelle: die Struktur sagt, das Element existierte, und nur der Inhalt war leer. Es wird nichts erfunden, um ihn zu füllen.
Welche verwandten Tools sollten Sie als Nächstes nutzen?
- YAML zu XMLKonverter – läuft in Ihrem BrowserÖffnen
- YAML-GrundlagenLeitfaden in verständlicher SpracheÖffnen
- JSON vs. XMLDirekter VergleichÖffnen
- XML in JSON umwandelnUmwandeln, ohne Attribute oder Ein-Element-Listen zu verlierenÖffnen
- JSON in YAML umwandelnMit Anführungszeichen, die den Rückweg überstehenÖffnen
- JSON formatierenEinrückung und Sortierung einstellen, Kommentare entfernenÖffnen