XML formatieren
Der XML-Formatter rückt ein XML-Dokument in Ihrem Browser mit einem Single-Pass-Tokenizer neu ein, sodass Kommentare, CDATA-Abschnitte, DOCTYPE-Teilmengen und Attributwerte mit spitzen Klammern unangetastet überleben. Falsch gepaarte oder ungeschlossene Tags meldet er mit Zeile und Spalte, statt den Baum stillschweigend umzuformen.
Wie funktioniert XML formatieren?
Die meisten XML-Formatter sind eine Kette von regulären Ausdrücken: erst die Kommentare entfernen, dann an Tags aufteilen, dann neu einrücken. Diese Reihenfolge lässt sich nicht korrekt machen, weil die Durchläufe sich gegenseitig im Kreis bedingen. Ob <!-- einen Kommentar öffnet, lässt sich nur entscheiden, wenn man weiß, ob man sich in einem CDATA-Abschnitt befindet. Wo ein CDATA-Abschnitt beginnt, lässt sich nur entscheiden, wenn man weiß, dass man nicht in einem Kommentar ist. Ob > ein Tag beendet, hängt davon ab, ob man sich in einem Attributwert befindet. Welche Reihenfolge man auch wählt – eine der drei ist falsch, und das Ergebnis ist stille Korruption statt eines Fehlers.
Dieser Formatter scannt das Dokument daher genau einmal in einen Tokenstrom – Deklaration, Processing Instruction, DOCTYPE, Kommentar, CDATA, öffnendes Tag, schließendes Tag, selbstschließendes Tag, Text – und alles danach ist eine Faltung über diese Tokens. Der Tokenizer ist von Konstruktion wegen verlustfrei: Jedes Byte der Eingabe landet in genau einem Token, und es gibt einen Test, der sicherstellt, dass ihre Verkettung das Originaldokument Byte für Byte reproduziert.
Genau dieses Design lässt die unangenehmen Fälle funktionieren, statt sie als Sonderfälle abzufangen. Ein DOCTYPE mit interner Teilmenge darf > enthalten, also verfolgt der Scan die Klammertiefe, statt das erste schließende Spitzzeichen zu nehmen. Ein Attributwert darf > enthalten, deshalb beachtet das Tag-Scanning Anführungszeichen. Ein einzelnes <, das nicht den Anfang eines Tags bildet – ungültiges XML, in handgeschriebenen Dateien allgegenwärtig – wird als Text durchgereicht, statt eine Formatierung abzubrechen, die der Autor erkennen kann, dass sie gelingen sollte.
Bei der Einrückung gibt es eine bewusste Ausnahme: Ein Element, dessen einziges Kind Text ist, bleibt in einer Zeile – man erhält also <name>Ada</name> statt drei Zeilen für zwei Wörter. Jedes Blatt zu sprengen ist der Hauptgrund, warum maschinell formatiertes XML schwerer zu lesen ist als handgeschriebenes.
Schließt der Baum nicht korrekt, hält der Formatter an und sagt, wo. Ein falsches </c> an einer Stelle, an der </b> erwartet wurde, wird mit Zeile und Spalte gemeldet; ein Dokument, das mitten im Baum endet, nennt die noch offenen Elemente. Die Alternative – die Tags stillschweigend für Sie zu schließen – erzeugt ein Dokument, das richtig aussieht und nicht das ist, das Sie hatten. Das ist der schlechteste mögliche Ausgang.
Minifiziert rein
<r><a id="1"><b>x</b></a><!-- c --><d/></r>
Formatiert raus
<r>
<a id="1">
<b>x</b>
</a>
<!-- c -->
<d />
</r>Welche Optionen und Sonderfälle unterstützt XML formatieren?
| Parameter | Typ | Standard | Verhalten & Sonderfälle |
|---|---|---|---|
| Einrückung | 2 | 4 | tab | 2 Leerzeichen | Gilt pro Verschachtelungsebene. Tabs sind die richtige Wahl, wenn die Datei in Editoren mit unterschiedlichen Einstellungen gelesen wird, denn jeder Leser steuert die visuelle Breite. |
| Leerraum zusammenfassen | Boolesch | true | Normalisiert Folgen von Leerzeichen und Zeilenumbrüchen in Textknoten. Schalten Sie es aus, wenn es auf jeden Leerraum im Text ankommt – etwa bei eingebettetem Quellcode außerhalb eines CDATA-Abschnitts. |
| Kommentare entfernen | Boolesch | false | Entfernt <!-- … --> vollständig. Kommentare bleiben standardmäßig erhalten, weil sie in Konfigurationsdateien häufig die einzige Dokumentation sind. |
| Attribute umbrechen | Ganzzahl | 0 (nie) | Ab dieser Anzahl kommt jedes Attribut in eine eigene Zeile. Nützlich bei SVG und XSLT, wo ein einzelnes Element ein Dutzend Attribute tragen kann und eine ungebrochene Zeile aus dem Bild läuft. |
| CDATA | beibehalten | — | Wortwörtlich wiedergegeben, einschließlich internem Leerraum und allen Zeichen, die nach Markup aussehen. Der Sinn eines CDATA-Abschnitts ist gerade, dass sein Inhalt nicht geparst wird. |
| DOCTYPE | beibehalten | — | Bleibt unangetastet, einschließlich einer internen Teilmenge mit >-Zeichen. Bis zum ersten > zu scannen kappt die Deklaration und macht aus dem Rest Text. |
| Namespaces | beibehalten | — | Präfixe und xmlns-Deklarationen laufen unverändert durch. Das ist ein Formatter, kein Validator: Es wird nicht geprüft, ob ein Präfix gebunden ist. |
| Fehlerhafte Eingabe | Fehler | — | Ein nicht passendes End-Tag, ein nicht abgeschlossener Kommentar oder CDATA-Abschnitt oder ein Dokument, das mitten im Baum endet, wird mit Position gemeldet. Nichts wird automatisch korrigiert, denn ein stillschweigend repariertes Dokument ist nicht das, das Sie hatten. |
Häufig gestellte Fragen
Ändert Formatierung, was mein XML bedeutet?
Ja, auf eine bestimmte Art: Whitespace innerhalb von Textinhalten ist in XML Daten, und ihn zusammenzufassen ändert diese Daten. Deshalb ist „Collapse whitespace“ ein Schalter und nicht immer aktiv – schalten Sie ihn aus bei Dokumenten, bei denen Text leerzeichensensibel ist. Alles andere bleibt exakt erhalten: CDATA-Inhalte, Kommentare, Attributwerte und der DOCTYPE.
Warum lehnt er mein Dokument ab, statt es zu reparieren?
Weil zu raten, welches Tag Sie schließen wollten, nichts ist, was ein Formatter gefahrlos tun kann. Bei <a><b></a> erzeugt das Schließen von <b> ein Dokument, das korrekt aussieht und einen anderen Baum hat als der, den Sie geschrieben haben. Der Fehler nennt Tag und Position, damit Sie entscheiden können – das dauert Sekunden und kann nicht falsch sein.
Beherrscht er SVG, XSLT, RSS, SOAP und Android-Layouts?
Ja – das ist alles XML, und nichts hier ist schema-bewusst. Besonders SVG und XSLT profitieren von der Option zum Umbrechen von Attributen, denn ein einzelnes Element mit einem Dutzend Attributen ist üblich, und ohne Umbrechen läuft es weit über den Bildschirmrand hinaus.
Was ist mit HTML?
Nur HTML in XHTML-Form. Echtes HTML hat Void-Elemente, die nie geschlossen werden (<br>, <img>), optionale schließende Tags (<li>, <td>) und Rohtext-Elemente wie <script>, deren Inhalt kein Markup ist. Dieser Tokenizer hält ein Dokument an XML-Regeln fest und meldet daher ein ungeschlossenes <br> als Fehler. Das ist für XML korrekt und für HTML falsch.
Gibt es eine Größenbegrenzung?
8 MB. Die Formatierung läuft im Main-Thread, oberhalb dieser Grenze lehnt das Tool also ab, statt den Tab einzufrieren. Tokenisierung und Formatierung sind beide iterativ statt rekursiv, sodass ein tief verschachteltes Dokument – es gibt einen Test mit fünftausend Ebenen – ein Ergebnis liefert, statt den Call-Stack überlaufen zu lassen.
Wird mein Dokument hochgeladen?
Nein. Es wird von JavaScript in dem Tab, den Sie bereits geöffnet haben, tokenisiert und neu eingerückt. Öffnen Sie den Netzwerk-Tab und fügen Sie eines ein: Nichts, was es transportiert, verlässt den Browser. XML-Konfigurationsdateien enthalten routinemäßig Connection-Strings, interne Hostnamen und Zugangsdaten – genau das Material, das nicht zur Neuformatierung durch einen unbekannten Server laufen sollte.