Formater du XML dans Notepad++, VS Code, xmllint et Python
Notepad++ et VS Code ne savent pas indenter du XML tout seuls : il leur faut une extension gratuite, puis un raccourci suffit. xmllint et Python le font depuis un terminal ou un script. Voici les menus, les raccourcis et les commandes pour formater du XML dans Notepad++, VS Code, xmllint et Python, et les deux pièges de Python qui laissent un fichier plein de lignes vides ou pas indenté du tout.
Quel outil choisir pour formater un fichier XML ?
Celui que vous avez déjà sous la main. Formater, ou « pretty print », ajoute des retours à la ligne et une indentation entre les éléments. Les données ne changent pas, et un programme qui lit le fichier voit le même document. Les quatre outils ci-dessous donnent le même genre de résultat :
- Notepad++ avec l’extension XML Tools : Ctrl+Alt+Maj+B.
- VS Code avec l’extension XML de Red Hat : Maj+Alt+F.
- xmllint, sous Linux, macOS ou WSL :
xmllint --format fichier.xml. - Python, pour les scripts qui traitent beaucoup de fichiers :
minidom,ElementTree.indent()ou lxml.
Tous exigent un XML bien formé. Si une balise n’est pas fermée, ils refusent d’indenter le fichier et donnent un numéro de ligne : c’est là qu’il faut chercher.
Si vous voulez seulement lire le fichier, vous n’avez peut-être pas besoin de le formater. Chrome indente le XML tout seul : ouvrez le fichier XML dans Chrome et vous obtenez une arborescence, même quand le fichier tient sur une seule ligne.
Pas d’éditeur sous la main ? Le XML Formatter indente un fichier dans votre navigateur, et le XML Validator donne la ligne et la colonne de la première erreur (deux outils gratuits, en anglais).
Formater du XML dans Notepad++ avec XML Tools
Notepad++ n’a pas de formateur XML intégré. L’extension gratuite XML Tools en ajoute un.
- Ouvrez Plugins > Plugins Admin.
- Dans l’onglet Available, cherchez « XML Tools », cochez-la et cliquez sur Install. Notepad++ redémarre.
- Ouvrez votre fichier XML, puis choisissez Plugins > XML Tools > Pretty print, ou appuyez sur Ctrl+Alt+Maj+B.
Le même menu propose des variantes. Pretty print - indent attributes (Ctrl+Alt+Maj+A) place en plus chaque attribut sur sa propre ligne, pratique pour les éléments très longs comme un tracé SVG ou une entrée de configuration. Pretty print - indent only corrige l’indentation sans ajouter de retours à la ligne. Linearize (Ctrl+Alt+Maj+L) fait l’inverse : il remet tout le document sur une ligne, utile avant de coller du XML dans un test ou une chaîne de caractères.
Si le raccourci ne semble rien faire, lancez Plugins > XML Tools > Check XML syntax now : il signale la première erreur du fichier. Et si XML Tools n’apparaît pas dans le gestionnaire, son README décrit l’installation à la main : créez un dossier XMLTools dans le dossier plugins de Notepad++, copiez-y XMLTools.dll, puis redémarrez.
Indenter du XML dans VS Code avec l’extension XML
VS Code formate le JavaScript, le TypeScript, le JSON, le HTML et le CSS sans rien installer, mais pas le XML. Lancez Format Document sur un fichier XML sans extension, et VS Code vous répond qu’aucun formateur n’est installé pour les fichiers XML.
- Ouvrez la vue Extensions (Ctrl+Maj+X), cherchez « XML » et installez XML de Red Hat. Depuis la version 0.15, elle fonctionne sans Java.
- Ouvrez votre fichier et appuyez sur Maj+Alt+F sous Windows, Maj+Option+F sous macOS ou Ctrl+Maj+I sous Linux. Format Document se trouve aussi dans la palette de commandes (Ctrl+Maj+P).
- Pour ne formater qu’une partie du fichier, sélectionnez-la et utilisez Format Selection (Ctrl+K Ctrl+F).
Si une autre extension installée sait aussi formater le XML, VS Code vous demande laquelle utiliser. Pour fixer ce choix, régler l’indentation du XML seulement et formater à chaque enregistrement, ajoutez ceci à votre settings.json :
"[xml]": {
"editor.defaultFormatter": "redhat.vscode-xml",
"editor.tabSize": 2,
"editor.formatOnSave": true
}
L’extension de Red Hat reprend l’indentation de editor.tabSize et editor.insertSpaces. Ses propres réglages commencent par xml.format. : xml.format.splitAttributes décide si les attributs vont sur des lignes séparées, et xml.format.maxLineWidth fixe la largeur maximale des lignes, 100 caractères par défaut, ou aucune limite avec 0.
Formater du XML en ligne de commande avec xmllint
xmllint est fourni avec libxml2. macOS l’inclut. Sous Debian et Ubuntu, il se trouve dans le paquet libxml2-utils, et sous Windows le plus simple est de passer par WSL avec la même commande :
sudo apt install libxml2-utils
Ensuite :
xmllint --format entree.xml # affiche le XML indenté
xmllint --format --output propre.xml entree.xml # l'écrit dans un nouveau fichier
curl -s https://example.com/sitemap.xml | xmllint --format - # lit depuis un pipe
N’écrivez pas xmllint --format fichier.xml > fichier.xml : le shell vide le fichier avant que xmllint ne le lise, et vous le perdez. Écrivez dans un nouveau fichier, puis renommez-le.
L’indentation est de deux espaces par défaut. La variable d’environnement XMLLINT_INDENT la change :
XMLLINT_INDENT=" " xmllint --format entree.xml # quatre espaces
XMLLINT_INDENT=$'\t' xmllint --format entree.xml # tabulations, sous bash
--format supprime les blancs déjà présents entre les éléments avant d’indenter à nouveau : un fichier mal indenté à la main ressort propre. Quand le XML est mal formé, xmllint affiche le nom du fichier, la ligne et l’erreur, et se termine avec un code différent de zéro. C’est donc un bon contrôle dans un script ou une intégration continue. Pour vérifier un fichier sans l’afficher, utilisez xmllint --noout entree.xml.
Indenter du XML en Python : minidom, ElementTree et lxml
Dans la bibliothèque standard, le plus rapide est xml.dom.minidom :
from xml.dom import minidom
dom = minidom.parse("entree.xml")
print(dom.toprettyxml(indent=" "))
Il cache deux pièges. Sur un fichier qui a déjà des retours à la ligne, toprettyxml() garde les anciens blancs et ajoute les siens : vous obtenez des lignes vides entre les éléments. Dans notre test avec Python 3.14, un petit fichier déjà indenté est ressorti avec des lignes vides autour de chaque enfant de la racine. Et sans argument encoding, la déclaration qu’il écrit n’indique pas l’encodage : <?xml version="1.0" ?>. Passez encoding="UTF-8" pour obtenir des octets avec l’encodage déclaré.
Depuis Python 3.9, xml.etree.ElementTree.indent() évite le premier piège, car elle remplace les blancs entre les éléments au lieu d’en ajouter :
import xml.etree.ElementTree as ET
tree = ET.parse("entree.xml")
ET.indent(tree, space=" ")
tree.write("propre.xml", encoding="UTF-8", xml_declaration=True)
Avec lxml (pip install lxml), pretty_print=True n’indente que les éléments qui n’ont encore aucun blanc autour d’eux. La FAQ de lxml explique pourquoi et donne la solution : lire le fichier avec remove_blank_text=True.
from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse("entree.xml", parser)
tree.write("propre.xml", pretty_print=True, xml_declaration=True, encoding="UTF-8")
Sans cette option, notre fichier de test a gardé son élément sur une seule ligne. lxml est aussi la bibliothèque de nos exemples de XSLT côté serveur en Python : un script qui transforme des fichiers peut indenter le résultat au passage.
Lire un long fichier XML sans le reformater
Formater sert à éditer et à obtenir des différences propres dans Git. Pour lire un long fichier, une vue qui replie la structure est souvent plus rapide que de faire défiler des milliers de lignes indentées, et elle ne touche pas au fichier.
Chrome affiche les fichiers XML locaux et en ligne sous forme d’arborescence indentée, sans réglage. XMLNest, visionneuse XML pour Chrome, disponible sur le Chrome Web Store, ajoute le pliage, la recherche dans les noms et les valeurs, une vue source avec numéros de ligne, et la ligne et la colonne de l’erreur quand un fichier est cassé. Vous savez alors où regarder avant d’ouvrir le fichier dans Notepad++ ou VS Code pour le corriger.
Sources
- Notepad++ User Manual : Plugins (vérifiée le 20 octobre 2026)
- XML Tools pour Notepad++, README et code des menus de morbac/xmltools sur GitHub (vérifiée le 20 octobre 2026)
- Documentation de Visual Studio Code : Basic editing, Formatting (vérifiée le 20 octobre 2026)
- Visual Studio Marketplace : XML par Red Hat (vérifiée le 20 octobre 2026)
- Documentation de vscode-xml : Formatting (vérifiée le 20 octobre 2026)
- libxml2 : page de manuel de xmllint (vérifiée le 20 octobre 2026)
- Paquets Debian : libxml2-utils (vérifiée le 20 octobre 2026)
- Documentation Python : xml.dom.minidom (vérifiée le 20 octobre 2026)
- Documentation Python : xml.etree.ElementTree, indent() (vérifiée le 20 octobre 2026)
- FAQ de lxml : pourquoi l'option pretty_print ne reformate pas la sortie XML (vérifiée le 20 octobre 2026)
- Test de XMLNest : Testé par XMLNest le 20 octobre 2026 avec Python 3.14.3 et lxml 6.0.2, sur un fichier dont la racine contenait un élément enfant écrit sur une seule ligne, sous une indentation existante : toprettyxml(indent=" ") de minidom a ajouté des lignes vides autour de l'enfant et écrit <?xml version="1.0" ?> sans encodage ; ElementTree.indent() a donné une indentation propre de deux espaces ; lxml avec pretty_print=True a laissé l'enfant sur une ligne, puis l'a indenté une fois le fichier lu avec remove_blank_text=True (vérifiée le 20 octobre 2026)