XML formatieren in Notepad++, VS Code, xmllint und Python

XML formatieren in Notepad++, VS Code, xmllint und Python: Dieser Artikel nennt für jedes Werkzeug den Menüpfad, das Tastenkürzel oder den Befehl. Notepad++ und VS Code können XML nicht von sich aus einrücken und brauchen eine kostenlose Erweiterung, xmllint und Python erledigen es im Terminal oder im Skript. Dazu kommen die zwei Python-Fallen, die eine Datei voller Leerzeilen oder ganz ohne Einrückung zurücklassen.

Welches Werkzeug eignet sich, um XML zu formatieren?

Das, was Sie ohnehin geöffnet haben. Formatieren, auch „Pretty Print“ genannt, fügt Zeilenumbrüche und Einrückungen zwischen den Elementen ein. Die Daten bleiben gleich, und ein Programm, das die Datei liest, sieht dasselbe Dokument. Die vier Werkzeuge unten liefern dieselbe Art von Ergebnis:

  • Notepad++ mit dem Plugin XML Tools: Strg+Alt+Umschalt+B.
  • VS Code mit der Erweiterung XML von Red Hat: Umschalt+Alt+F.
  • xmllint unter Linux, macOS oder WSL: xmllint --format datei.xml.
  • Python für Skripte, die viele Dateien verarbeiten: minidom, ElementTree.indent() oder lxml.

Alle setzen wohlgeformtes XML voraus. Fehlt ein schließendes Tag, verweigern sie die Formatierung und nennen eine Zeilennummer. Dort beginnt die Suche.

Wer eine Datei nur lesen will, muss sie vielleicht gar nicht formatieren. Chrome rückt XML selbst ein. Wenn Sie die XML-Datei in Chrome öffnen, sehen Sie einen Baum, auch wenn die Datei aus einer einzigen langen Zeile besteht.

Kein Editor zur Hand? Der XML Formatter rückt eine Datei in Ihrem Browser ein, und der XML Validator nennt Zeile und Spalte des ersten Fehlers (beide kostenlos, auf Englisch).

XML in Notepad++ mit XML Tools formatieren

Notepad++ hat keinen eigenen XML-Formatierer. Das kostenlose Plugin XML Tools rüstet ihn nach.

  1. Öffnen Sie Plugins > Plugins Admin.
  2. Suchen Sie im Reiter Available nach „XML Tools“, setzen Sie das Häkchen und klicken Sie auf Install. Notepad++ startet neu.
  3. Öffnen Sie Ihre XML-Datei und wählen Sie Plugins > XML Tools > Pretty print, oder drücken Sie Strg+Alt+Umschalt+B.

Im selben Menü gibt es Varianten. Pretty print - indent attributes (Strg+Alt+Umschalt+A) setzt zusätzlich jedes Attribut in eine eigene Zeile, hilfreich bei langen Elementen wie SVG-Pfaden oder Konfigurationseinträgen. Pretty print - indent only korrigiert nur die Einrückung, ohne Zeilenumbrüche einzufügen. Linearize (Strg+Alt+Umschalt+L) macht das Gegenteil und schreibt das ganze Dokument wieder in eine Zeile, praktisch, bevor Sie XML in einen Test oder einen String kopieren.

Tut das Tastenkürzel scheinbar nichts, starten Sie Plugins > XML Tools > Check XML syntax now. Es meldet den ersten Fehler der Datei. Fehlt XML Tools im Plugins Admin, beschreibt die README die manuelle Installation: einen Ordner XMLTools im Ordner plugins von Notepad++ anlegen, XMLTools.dll hineinkopieren und neu starten.

XML in VS Code mit der XML-Erweiterung formatieren

VS Code formatiert JavaScript, TypeScript, JSON, HTML und CSS ab Werk, XML aber nicht. Rufen Sie ohne Erweiterung Format Document für eine XML-Datei auf, meldet VS Code, dass für XML-Dateien kein Formatierer installiert ist.

  1. Öffnen Sie die Ansicht Erweiterungen (Strg+Umschalt+X), suchen Sie nach „XML“ und installieren Sie XML von Red Hat. Seit Version 0.15 läuft sie ohne Java.
  2. Öffnen Sie Ihre Datei und drücken Sie Umschalt+Alt+F unter Windows, Umschalt+Option+F unter macOS oder Strg+Umschalt+I unter Linux. Format Document steht auch in der Befehlspalette (Strg+Umschalt+P).
  3. Um nur einen Teil der Datei zu formatieren, markieren Sie ihn und nutzen Format Selection (Strg+K Strg+F).

Kann eine weitere installierte Erweiterung ebenfalls XML formatieren, fragt VS Code, welche es nehmen soll. Um diese Wahl festzulegen, die Einrückung nur für XML einzustellen und bei jedem Speichern zu formatieren, ergänzen Sie Ihre settings.json:

"[xml]": {
  "editor.defaultFormatter": "redhat.vscode-xml",
  "editor.tabSize": 2,
  "editor.formatOnSave": true
}

Die Erweiterung von Red Hat übernimmt die Einrückung aus editor.tabSize und editor.insertSpaces. Ihre eigenen Einstellungen beginnen mit xml.format.: xml.format.splitAttributes legt fest, ob Attribute in eigene Zeilen kommen, und xml.format.maxLineWidth bestimmt die maximale Zeilenbreite, standardmäßig 100 Zeichen, mit 0 ohne Grenze.

XML auf der Kommandozeile mit xmllint formatieren

xmllint gehört zu libxml2. macOS bringt es mit. Unter Debian und Ubuntu steckt es im Paket libxml2-utils, unter Windows ist WSL mit demselben Befehl der einfachste Weg:

sudo apt install libxml2-utils

Danach:

xmllint --format eingabe.xml                          # formatiertes XML ausgeben
xmllint --format --output sauber.xml eingabe.xml      # in eine neue Datei schreiben
curl -s https://example.com/sitemap.xml | xmllint --format -   # aus einer Pipe lesen

Schreiben Sie nicht xmllint --format datei.xml > datei.xml: Die Shell leert die Datei, bevor xmllint sie liest, und der Inhalt ist weg. Schreiben Sie in eine neue Datei und benennen Sie sie danach um.

Standardmäßig rückt xmllint mit zwei Leerzeichen ein. Die Umgebungsvariable XMLLINT_INDENT ändert das:

XMLLINT_INDENT="    " xmllint --format eingabe.xml   # vier Leerzeichen
XMLLINT_INDENT=$'\t' xmllint --format eingabe.xml    # Tabulatoren, in bash

--format verwirft die vorhandenen Leerräume zwischen den Elementen, bevor es neu einrückt. Eine von Hand schief eingerückte Datei kommt also sauber heraus. Ist das XML nicht wohlgeformt, gibt xmllint Dateiname, Zeile und Parserfehler aus und endet mit einem Exit-Code ungleich null. Damit eignet es sich als Prüfung in einem Skript oder einer CI-Pipeline. Um eine Datei nur zu prüfen, ohne sie auszugeben, nutzen Sie xmllint --noout eingabe.xml.

XML in Python schön ausgeben: minidom, ElementTree und lxml

In der Standardbibliothek geht es am schnellsten mit xml.dom.minidom:

from xml.dom import minidom

dom = minidom.parse("eingabe.xml")
print(dom.toprettyxml(indent="  "))

Dabei lauern zwei Fallen. Bei einer Datei, die schon Zeilenumbrüche hat, behält toprettyxml() die alten Leerräume und fügt eigene hinzu: Es entstehen Leerzeilen zwischen den Elementen. In unserem Test mit Python 3.14 kam eine kleine, bereits eingerückte Datei mit Leerzeilen um jedes Kind der Wurzel heraus. Und ohne das Argument encoding fehlt in der geschriebenen Deklaration die Kodierung: <?xml version="1.0" ?>. Mit encoding="UTF-8" erhalten Sie Bytes mit deklarierter Kodierung.

Seit Python 3.9 umgeht xml.etree.ElementTree.indent() die erste Falle, weil die Funktion die Leerräume zwischen den Elementen ersetzt, statt neue anzuhängen:

import xml.etree.ElementTree as ET

tree = ET.parse("eingabe.xml")
ET.indent(tree, space="  ")
tree.write("sauber.xml", encoding="UTF-8", xml_declaration=True)

Mit lxml (pip install lxml) rückt pretty_print=True nur Elemente ein, um die noch kein Leerraum steht. Die lxml-FAQ erklärt den Grund und nennt die Lösung: die Datei vorher mit remove_blank_text=True einlesen.

from lxml import etree

parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse("eingabe.xml", parser)
tree.write("sauber.xml", pretty_print=True, xml_declaration=True, encoding="UTF-8")

Ohne diese Parser-Option behielt unsere Testdatei ihr einzeiliges Element. lxml ist auch die Bibliothek unserer Beispiele für XSLT auf dem Server mit Python. Ein Skript, das Dateien transformiert, kann das Ergebnis also im selben Durchgang formatieren.

Lange XML-Dateien lesen, ohne sie umzuformatieren

Formatieren lohnt sich zum Bearbeiten und für saubere Diffs. Zum Lesen einer langen Datei ist eine Ansicht, die die Struktur einklappt, oft schneller als das Scrollen durch Tausende eingerückte Zeilen, und die Datei bleibt unverändert.

Chrome zeigt lokale und Online-XML-Dateien ohne Einrichtung als eingerückten Baum. XMLNest, ein XML-Viewer für Chrome, erhältlich im Chrome Web Store, ergänzt Ein- und Ausklappen, Suche in Elementnamen und Werten, eine Quelltextansicht mit Zeilennummern sowie Zeile und Spalte des Fehlers, wenn eine Datei kaputt ist. So wissen Sie, wo Sie suchen müssen, bevor Sie die Datei in Notepad++ oder VS Code öffnen und korrigieren.

Quellen

  1. Notepad++ User Manual: Plugins (geprüft am 20. Oktober 2026)
  2. XML Tools für Notepad++, README und Menü-Quellcode von morbac/xmltools auf GitHub (geprüft am 20. Oktober 2026)
  3. Dokumentation von Visual Studio Code: Basic editing, Formatting (geprüft am 20. Oktober 2026)
  4. Visual Studio Marketplace: XML von Red Hat (geprüft am 20. Oktober 2026)
  5. Dokumentation von vscode-xml: Formatting (geprüft am 20. Oktober 2026)
  6. libxml2: Handbuchseite von xmllint (geprüft am 20. Oktober 2026)
  7. Debian-Pakete: libxml2-utils (geprüft am 20. Oktober 2026)
  8. Python-Dokumentation: xml.dom.minidom (geprüft am 20. Oktober 2026)
  9. Python-Dokumentation: xml.etree.ElementTree, indent() (geprüft am 20. Oktober 2026)
  10. lxml-FAQ: Why doesn't the pretty_print option reformat my XML output? (geprüft am 20. Oktober 2026)
  11. Test von XMLNest : Von XMLNest am 20. Oktober 2026 mit Python 3.14.3 und lxml 6.0.2 getestet, an einer Datei, deren Wurzel ein Kindelement in einer einzigen Zeile unter einer vorhandenen Einrückung enthielt: toprettyxml(indent=" ") von minidom fügte Leerzeilen um das Kind ein und schrieb <?xml version="1.0" ?> ohne Kodierung; ElementTree.indent() ergab eine saubere Einrückung mit zwei Leerzeichen; lxml mit pretty_print=True ließ das Kind in einer Zeile und rückte es erst ein, nachdem die Datei mit remove_blank_text=True eingelesen wurde (geprüft am 20. Oktober 2026)