Skip to main content

XML-Formatierer / Validator

XML mit anpassbarer Einrückung formatieren, verschönern und validieren.

Geprüft von · Zuletzt geprüft

Den XML-Formatierer verwenden

  1. Dein XML einfügen in den Eingabebereich. Ein vollständiges Dokument mit einer XML-Deklaration, ein SOAP-Envelope, ein Atom-Feed oder eine Konfigurationsdatei wie eine Maven-pom.xml funktionieren alle.
  2. Eine Einrückung wählen: zwei Leerzeichen, vier Leerzeichen oder ein Tabulator-Zeichen. Die Formatieren-Schaltfläche verwendet diese Einstellung beim nächsten Ausführen.
  3. Auf Formatieren klicken für eine eingerückte Baumansicht, Minimieren um auf eine einzige Zeile zu reduzieren, oder Validieren um zu prüfen, ob das Dokument wohlgeformt nach der XML-1.0-Spezifikation ist.
  4. Das Ergebnis im Ausgabebereich überprüfen. Wenn die Validierung fehlschlägt, meldet das Fehlerbanner die Zeile und Spalte des Problems, sodass du zurück springen kannst, um es zu beheben.

Was es tut und wie

Das Tool erstellt einen echten DOM-Baum mit dem browsereigenen DOMParser unter Verwendung des MIME-Typs application/xml. Das bedeutet, dass die Validierung auf demselben Parser aufsetzt, den Chrome, Firefox und Safari zur Verarbeitung von XML in XHR-Antworten und in fetch() verwenden, sodass sich Wohlgeformtheitsregeln (übereinstimmende Tags, korrekt maskierte Entitäten, korrektes Attribut-Quoting) genau so verhalten wie in einer echten XML-Pipeline. Sobald das Parsen erfolgreich ist, führt der Formatierer einen Tiefensuchdurchlauf durch und gibt jedes Element mit einer Einrückung aus, die seiner Baumtiefe entspricht.

Text-Knoten behalten ihren Inhalt wörtlich zwischen Tags bei; Nur-Leerzeichen-Text zwischen Elementen wird während des Pretty-Printings verworfen, damit der Baum visuell sauber ist. Verarbeitungsanweisungen (<?xml-stylesheet ...?>), CDATA-Abschnitte und Kommentare werden auf eigenen Zeilen beibehalten. Das Minimieren führt den umgekehrten Durchlauf durch - derselbe DOM-Baum wird ohne Einrückung zurück serialisiert. Da ein Parse erforderlich ist, lehnt dieses Tool aktiv missgeformte Dokumente ab, anstatt Reparaturen zu erraten, anders als HTML, das dokumentierte Wiederherstellungsregeln hat.

Wann dieses Tool seinen Wert beweist

  • Debuggen einer SOAP-Anforderung oder -Antwort, bei der der Server alles in einer Zeile zurückgegeben hat.
  • Lesen einer Maven-, Ant- oder Gradle-Build-Datei, die über Jahre ohne konsistente Einrückung bearbeitet wurde.
  • Untersuchen eines RSS- oder Atom-Feeds, der von curl kopiert wurde, um seine Struktur zu verstehen.
  • Validieren einer SVG-Datei vor dem Einbetten in ein Design-System - SVG ist XML, sodass dieselben Regeln gelten.
  • Normalisieren der Ausgabe eines XML-Template-Generators vor dem Einchecken in die Versionskontrolle.
  • Vorbereiten eines präzisen Minimum-Repro-XML-Snippets beim Melden eines Bugs gegen einen Parser oder Serialisierer.

Randfälle, auf die du achten solltest

  • Namespaces. Präfixe wie xsi: oder soap: werden genau so beibehalten, wie sie erscheinen. Wenn deine Quelle deklarierte und undeklarierte Namespaces mischt, wird der Parser es ablehnen - das ist ein echter Wohlgeformtheitsfehler gemäß XML 1.0.
  • Leerzeichen-empfindlicher Inhalt. XML hat ein xml:space="preserve"-Attribut, das Parsern sagt, den Text-Inhalt byte-für-byte zu behalten. Der aktuelle Formatierer beachtet das nicht; wenn du Beibehaltung brauchst, behalte deine Quelle manuell eingerückt.
  • Entitäts-Referenzen. Die fünf vordefinierten Entitäten (&amp;, &lt;, &gt;, &quot;, &apos;) werden korrekt hin- und hergeleitet. Benutzerdefinierte Entitäten, die in einer internen DTD deklariert sind, können je nach Browser aufgelöst oder beibehalten werden.
  • Gemischter Inhalt. Wenn ein Element sowohl Text als auch Kind-Elemente enthält (<p>Hallo <b>Welt</b>!</p>), stellt der Pretty-Printer die Kinder auf separate Zeilen, kann aber den Abstand zwischen Text und Tags ändern. Minimieren ist für gemischten Inhalt verlustfrei.
  • Kodierung. Die Eingabe wird als UTF-8 angenommen. Wenn deine Quelle eine andere Kodierung deklariert (<?xml version="1.0" encoding="ISO-8859-1"?>), musst du möglicherweise zuerst in UTF-8 konvertieren.

XML-Spezifikationshintergrund

XML ist definiert durch die W3C-Empfehlung Extensible Markup Language 1.0 (plus Errata) und die spätere XML-1.1-Revision, die zusätzliche Unicode-Zeichen handhabt. Die Spezifikation ist streng auf eine Weise, die HTML nicht ist: Jedes öffnende Tag erfordert ein passendes Schließungs-Tag, Attributwerte müssen in Anführungszeichen stehen, und die fünf vordefinierten Entitäten sind die einzigen impliziten. Wohlgeformtheit ist eine Grundvoraussetzung; Validität gegen eine DTD oder ein XML-Schema (XSD) ist eine stärkere zusätzliche Prüfung, die dieses Tool nicht durchführt. Die XML-Deklaration und das Encoding-Pseudo-Attribut sind in Abschnitt 2.8 definiert, und die Regeln für Verarbeitungsanweisungen und Kommentare sitzen in Abschnitt 2.6. Namespaces sind in einer separaten Spezifikation, Namespaces in XML 1.0, definiert.

Vergleiche

Befehlszeilen-xmllint --format (Teil von libxml2) ist der Referenz-Pretty-Printer in der Unix-Welt und unterstützt DTD-Validierung, XPath-Abfragen und XInclude-Verarbeitung. Wenn du libxml2 installiert hast, ist es streng leistungsfähiger. xmlstarlet schichtet ergonomische Abfragen auf dieselbe Bibliothek. IntelliJ, VS Code mit der XML-Erweiterung und Oxygen XML Editor bieten alle Format-beim-Speichern mit Schema-Bewusstsein an. Dieses Web-Tool ist für die Momente, in denen keines davon erreichbar ist - SSH-Boxen ohne libxml2, Telefone, gesperrte Arbeitslaptops - und für schnelles Validieren eingefügter Snippets ohne etwas auf Disk zu speichern.

Häufig gestellte Fragen

Welchen XML-Parser verwendet das Tool?

Es verwendet den browsereigenen <code>DOMParser</code> mit dem MIME-Typ <code>application/xml</code>. Das bedeutet, dass Chrome und Edge Blink verwenden, Firefox Gecko und Safari WebKit. Jede Engine implementiert dieselben XML-1.0-Wohlgeformtheitsregeln, sodass ein Dokument, das hier geparst wird, generell in jedem anderen XML-Verbraucher geparst wird. Validierungsmeldungen können zwischen Engines leicht abweichen, da jede ihren eigenen Fehlertext schreibt.

Kann es gegen eine DTD oder ein XML-Schema validieren?

Nein. Die Validierung ist auf Wohlgeformtheit beschränkt, was der XML-1.0-Grundstandard ist - Tags sind balanciert, Attribute sind in Anführungszeichen, Entitäten sind deklariert. Das Prüfen gegen eine Document Type Definition oder ein XSD erfordert Schema-bewusste Parser wie <code>xmllint</code>, <code>xmlstarlet</code> oder Javas <code>javax.xml.validation</code>-API. Verwende diese in einem Build-Schritt, wenn Contract-Validierung wichtig ist.

Warum schlägt mein SOAP-Envelope beim Formatieren fehl?

Die häufigste Ursache ist ein Namespace-Präfix, das nicht deklariert wurde. Viele SOAP-Beispiele in Blog-Beiträgen entfernen die <code>xmlns:</code>-Deklarationen der Kürze halber, und der Browser-Parser lehnt solche Dokumente ab. Stelle sicher, dass jedes Präfix, das in einem Element- oder Attributnamen verwendet wird, ein passendes <code>xmlns:prefix="..."</code> auf einem Vorfahren hat. Die Fehlermeldung enthält das anstoßende Präfix.

Prüft die Validierung die Encoding-Deklaration?

Nein, weil das XML zu dem Zeitpunkt, an dem es den Browser erreicht, bereits als JavaScript-String dekodiert wurde. Die deklarierte Kodierung in <code>&lt;?xml version="1.0" encoding="..."?&gt;</code> wird auf dieser Ebene ignoriert. Wenn du verifizieren musst, dass eine Quelldatei ihrer deklarierten Kodierung entspricht, führe <code>xmllint --encode</code> aus oder prüfe mit <code>file(1)</code> auf der Befehlszeile vor dem Einfügen.

Wird mein XML zum Parsen an einen Server gesendet?

Nein. <code>DOMParser</code> ist eine synchrone, prozessinterne API und jede Aktion bleibt innerhalb deines Tabs. Es gibt keinen Netzwerkaufruf, kein Websocket und kein Schreiben in IndexedDB oder localStorage. Du kannst das DevTools-Netzwerk-Panel öffnen, auf Formatieren klicken und beobachten, wie es null neue Anfragen aufzeichnet. Die Eingabe und das geparste DOM existieren nur im Speicher des Tabs und werden beim Neuladen der Seite freigegeben.

Wird das Formatieren mein signiertes XML-Dokument beschädigen?

Ja, wenn die Signatur die serialisierten Bytes abdeckt. Digitale XML-Signaturen kanonisieren das Dokument vor dem Hashen genau deshalb, weil Pretty-Printing Byte-Sequenzen ändert ohne die Struktur zu ändern. Wenn ein Dokument ein eingebettetes <code>&lt;Signature&gt;</code> -Element hat, formatiere es nur zur Inspektion und signiere es erneut mit der ursprünglichen kanonisierten Form. Verwende die Minimieren-Operation, um eine einzeilige Version zu erhalten, die wahrscheinlich näher an der kanonischen Form liegt, aber immer noch nicht garantiert ist.

Verarbeitet es CDATA-Abschnitte korrekt?

Ja. <code>&lt;![CDATA[ ... ]]&gt;</code>-Blöcke werden wörtlich beibehalten. Das ist wichtig, weil CDATA häufig eingebettete Skripte, SQL-Fragmente oder HTML umschließt, die andernfalls als Entitäten kodiert werden müssten. Der Parser behandelt das CDATA als einzelnen Text-Knoten und der Serialisierer reproduziert es unverändert.

Kann ich ein HTML-Dokument hier einfügen und formatieren?

Es wird fehlschlagen, es sei denn, dein HTML ist striktes XHTML - jedes Tag geschlossen, Attribute in Anführungszeichen, void-Elemente selbst- geschlossen. Echtes HTML verwendet ausgelassene Schließungs-Tags und nicht in Anführungszeichen stehende Attribute, was in HTML legal, aber nicht in XML ist. Verwende den HTML-Formatierer für HTML-Eingabe; dieses Tool erwartet Dokumente, die einen XML-Parser bestehen würden.

Wie groß kann das XML-Dokument höchstens sein?

Browser können Dateien bis zu mehreren Megabyte komfortabel durch <code>DOMParser</code> parsen. Sehr große Dokumente (Dutzende von Megabyte, üblich bei Dataset-Exporten von NCBI oder Wikipedia) können Tab-Speicher erschöpfen und die Seite einfrieren. Für diese Arbeitslasten wechsle zu Streaming-Parsern wie <code>lxml</code> in Python oder SAX-basierten Tools, die niemals das vollständige DOM im Speicher aufbauen.

Bewahrt der Minimizer die XML-Deklaration auf?

Ja. Die <code>&lt;?xml version="1.0" ... ?&gt;</code>-Verarbeitungsanweisung wird zuerst in der minimierten Ausgabe ausgegeben, wie es die Spezifikation erfordert. Alle führenden Kommentare oder Verarbeitungsanweisungen vor dem Wurzelelement werden in derselben Reihenfolge beibehalten. Die Ausgabe ist ein gültig wohlgeformtes XML-Dokument, das über die Leitung gesendet werden kann.

Verwandte Tools

Mehr Developer Tools

ZeroUtil unterstützen