XML formatieren und einrücken
- Dashboard
- Dokumentation
- API
Warum XML formatieren?
Die XML-Formatierung (auch XML-Aufbereitung, XML-Einrückung oder Pretty Print genannt) besteht darin, ein kompaktes oder minifiziertes XML-Dokument in eine zeilenweise lesbare, eingerückte Struktur umzuordnen. Ein gut formatiertes XML verbessert die menschliche Lesbarkeit, was unverzichtbar ist, wenn man eine SOAP-Antwort lesen, einen RSS-Feed durchstöbern oder den Inhalt einer Konfigurationsdatei inspizieren muss.
Konkret formatiert man sein XML aus vier Hauptgründen:
- Debugging: schnell ein nicht geschlossenes Tag, ein fehlendes Attribut oder eine inkonsistente Struktur erkennen.
- Manuelle Integration: sauber ein Fragment in eine Konfigurationsdatei kopieren, ohne die bestehende Einrückung zu zerstören.
- Code-Review: zwei Versionen eines XML-Dokuments in einem Git-Diff vergleichen wird lesbar, wenn jedes Tag in einer eigenen Zeile steht.
- Dokumentation und Beispiele: ein formatiertes XML ist in einer technischen Doku oder einem README deutlich pädagogischer.
Typische Anwendungsfälle
XML ist im Software-Ökosystem weiterhin allgegenwärtig. Hier sind die Formate, bei denen Entwickler am häufigsten einen XML-Formatierer verwenden:
- SOAP-Antworten: Die
<soap:Envelope>-Hüllen, die von SOAP-Webservices zurückgegeben werden, kommen in der Regel minifiziert an. - RSS- und Atom-Feeds: zum Inspizieren oder Auditieren eines Syndizierungsfeeds.
- Spring-, Maven- (
pom.xml), Ant-, Ivy-Konfigurationen: Build- und Abhängigkeitsdateien für Java. AndroidManifest.xmlund andere XML-Ressourcen eines Android-Projekts.- SVG-Dateien: Eine aus einer Design-Software exportierte Vektorgrafik ist oft auf einer einzigen Zeile komprimiert.
- E-Commerce-Exporte: Google-Shopping-Produktfeeds, Magento-, Shopify- oder PrestaShop-Exporte.
- OOXML-Dokumente: Die Dateien
.docx,.xlsxund.pptxsind ZIP-Archive, die XML-Dateien enthalten, die häufig inspiziert werden müssen. - XML-Sitemaps: die an Suchmaschinen ausgelieferten
sitemap.xml.
Wie die XML-Formatierung funktioniert
Ein XML-Formatierer fügt nicht einfach zufällig Leerzeichen ein. Er führt zwei Schritte aus:
- Parsing: Das Dokument wird gelesen und dann in einen DOM-Baum (Document Object Model) umgewandelt. Dieser Schritt validiert auch, dass das XML wohlgeformt ist (korrekt verschachtelte Tags, Attribute in Anführungszeichen, ein einziges Wurzelelement).
- Eingerückte Serialisierung: Der DOM-Baum wird als Text neu ausgegeben, mit Zeilenumbrüchen zwischen den Elementen und einer zur Tiefe im Baum proportionalen Einrückung.
Dieser baumbasierte Ansatz stellt sicher, dass die logische Struktur des Dokuments streng identisch bleibt: Nur die nicht signifikanten Leerzeichen zwischen Tags werden geändert. CDATA-Abschnitte, Kommentare und Verarbeitungsanweisungen bleiben erhalten. Weitergehende Transformationen (XSLT) oder Abfragen (XPath) operieren übrigens auf demselben DOM-Baum.
So verwenden Sie den XML-Formatierer
Das Vorgehen ist bewusst einfach:
- Fügen Sie Ihr XML-Dokument in das Textfeld ein oder laden Sie eine
.xml-Datei hoch. - Bestätigen Sie das Formular: Das Dokument wird analysiert und automatisch eingerückt.
- Das formatierte Ergebnis erscheint im Ausgabebereich. Bei einem Parsing-Fehler weist eine Meldung auf die Art und die ungefähre Position des Problems hin.
- Kopieren Sie das Ergebnis mit der dedizierten Schaltfläche oder laden Sie es herunter, um es direkt in Ihr Projekt zu integrieren.
Best Practices für XML-Einrückung
Einige Konventionen, die zu beachten sind, um sauberes und langlebiges XML zu erzeugen:
- Einrückung: 2 oder 4 Leerzeichen je nach Konvention Ihres Teams. Bleiben Sie im gesamten Projekt konsistent.
- Zeilenumbrüche: ein Element pro Zeile, was Git-Diffs nutzbar macht.
- CDATA-Abschnitte: Ein guter Formatierer behält die
<![CDATA[ ... ]]>-Blöcke vollständig bei, ohne deren Inhalt neu einzurücken, der als Rohtext behandelt wird. - Kodierung: Deklarieren Sie die Kodierung immer in der ersten Zeile mit
<?xml version="1.0" encoding="UTF-8"?>. UTF-8 ist der De-facto-Standard. - Attribute: Wenn ein Element viele Attribute hat, setzen einige Teams sie der Lesbarkeit halber auf eine neue Zeile; ansonsten bleiben sie auf derselben Zeile wie das öffnende Tag.
- Kommentare:
<!-- ... -->müssen vom Formatierer unverändert beibehalten werden.
Beispiel vorher / nachher
Hier ist ein konkretes Beispiel eines kompakten XML, das vom Formatierer verschönert wird.
Vorher (eine einzige Zeile, unlesbar):
<root><item id="1">val</item><item id="2">val2</item></root>
Nachher (formatiert mit 2 Leerzeichen):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1">val</item>
<item id="2">val2</item>
</root>
Die logische Struktur ist streng identisch: Nur die visuelle Anordnung ändert sich.
Vollständiges Beispiel
Ein umfangreicheres XML-Dokument nach der Formatierung sieht so aus:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user id="12345">
<name>John Doe</name>
<email>johndoe@example.com</email>
<address>
<street>123 Main St</street>
<city>Springfield</city>
<state>IL</state>
<postalCode>62704</postalCode>
<country>USA</country>
</address>
<phoneNumbers>
<phoneNumber type="home">555-1234</phoneNumber>
<phoneNumber type="work">555-5678</phoneNumber>
</phoneNumbers>
<preferences>
<newsletter>true</newsletter>
<theme>dark</theme>
</preferences>
<lastLogin>2024-06-14T09:30:00Z</lastLogin>
</user>
</root>
Häufig gestellte Fragen
Was ist ein wohlgeformtes XML?
Ein XML wird als wohlgeformt (well-formed) bezeichnet, wenn es die syntaktischen Grundregeln einhält: ein einziges Wurzelelement, korrekt verschachtelte und geschlossene Tags, Attribute in Anführungszeichen, escaped Sonderzeichen (&, <, >). Das ist eine Voraussetzung, um das Dokument parsen zu können. Nicht zu verwechseln mit einem gültigen XML, das zusätzlich einem XSD-Schema oder einer DTD entspricht.
Was ist der Unterschied zwischen Formatierung (Pretty Print) und XML-Minifizierung?
Pretty Print fügt Zeilenumbrüche und Einrückung für die menschliche Lesbarkeit hinzu. Die Minifizierung tut das Gegenteil: Sie entfernt alle nicht signifikanten Leerzeichen, um die Dokumentgröße zu reduzieren, was für die Netzwerkübertragung nützlich ist (SOAP-Antworten, XML-APIs). Beide Dokumente sind semantisch gleichwertig.
Bleiben Kommentare und CDATA-Abschnitte bei der Formatierung erhalten?
Ja. Ein korrekter Formatierer bewahrt Kommentare <!-- ... -->, CDATA-Abschnitte <![CDATA[ ... ]]> sowie Verarbeitungsanweisungen (<? ... ?>). Der Inhalt eines CDATA bleibt ohne Neu-Einrückung intakt, da er als Rohtext behandelt wird. Prüfen Sie das Ergebnis, wenn Ihre Kommentare dokumentarisch wichtig sind.
Werden XML-Namespaces (xmlns) verarbeitet?
Ja. Namespace-Deklarationen (xmlns:soap="...") und die zugehörigen Präfixe (<soap:Envelope>) werden unverändert beibehalten. Der Formatierer benennt Präfixe nicht um und verschiebt keine Deklarationen im Baum, was sicherstellt, dass die Semantik des Dokuments identisch bleibt. Standard-Namespaces (ohne Präfix) werden ebenfalls auf ihrer Deklarationsebene beibehalten.
Mit Leerzeichen oder Tabulatoren einrücken?
Beides funktioniert, aber Leerzeichen sind die dominante Konvention, da sie überall identisch dargestellt werden (Terminals, Browser, Git-Diff). 2 oder 4 Leerzeichen je nach Verbosität Ihres XML: 2 für stark verschachtelte Dokumente (SVG, Spring-Konfigurationen), 4 für flache Dokumente. Wichtig bleibt die Konsistenz im gesamten Projekt.
Ändert der Formatierer die Semantik des Dokuments?
Nein. Nur die Leerzeichen zwischen Tags werden angepasst. Die DOM-Struktur, die Attributwerte und der Textinhalt der Elemente bleiben identisch. Ausnahme: Signifikanter Textinhalt (mit xml:space="preserve") muss unverändert beibehalten werden; prüfen Sie diesen Aspekt, wenn Ihre Daten bedeutungsvolle Leerzeichen enthalten.
Kann man ein XML gleichzeitig validieren und formatieren?
Der Formatierer führt bereits eine Syntaxvalidierung durch (wohlgeformtes XML), da er das Dokument parsen muss. Für eine Validierung gegen ein XSD-Schema oder eine DTD braucht es ein dediziertes Tool: Die strukturelle Validierung geht über den Rahmen eines reinen Formatierers hinaus. xmllint --schema oder xerces sind für diesen zusätzlichen Schritt geeignet.
Beispielanfrage
curl -X POST https://cdrn.fr/api/v1/tools/xml-formatter/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Eingabeschema
| Feld | Typ | Erforderlich | Standard |
|---|---|---|---|
input |
text | ✓ | – |
Endpunkte
GET https://cdrn.fr/api/v1/tools- listet alle verfügbaren Tools aufGET https://cdrn.fr/api/v1/tools/xml-formatter- liefert das Schema dieses ToolsPOST https://cdrn.fr/api/v1/tools/xml-formatter/execute- führt dieses Tool mit einem JSON-Payload aus