Formattare XML in Notepad++, VS Code, xmllint e Python
Notepad++ e VS Code non sanno indentare l'XML da soli: a ciascuno serve un'estensione gratuita, poi basta una scorciatoia. xmllint e Python lo fanno dal terminale o da uno script. Qui trovi i menu, le scorciatoie e i comandi per formattare XML in Notepad++, VS Code, xmllint e Python, e le due trappole di Python che lasciano un file pieno di righe vuote o per niente indentato.
Quale strumento usare per formattare un file XML?
Quello che hai già aperto. Formattare, o fare il «pretty print», aggiunge a capo e indentazione tra gli elementi. I dati non cambiano, e un programma che legge il file vede lo stesso documento. I quattro strumenti qui sotto danno lo stesso tipo di risultato:
- Notepad++ con il plugin XML Tools: Ctrl+Alt+Maiusc+B.
- VS Code con l’estensione XML di Red Hat: Maiusc+Alt+F.
- xmllint, su Linux, macOS o WSL:
xmllint --format file.xml. - Python, per gli script che elaborano molti file:
minidom,ElementTree.indent()o lxml.
Tutti richiedono un XML ben formato. Se un tag non è chiuso, si rifiutano di formattare il file e indicano un numero di riga: è lì che bisogna cercare.
Se vuoi solo leggere il file, forse non serve formattarlo. Chrome indenta l’XML da solo: apri il file XML in Chrome e vedrai un albero, anche quando il file sta tutto su una riga.
Nessun editor a portata di mano? L’XML Formatter indenta un file nel tuo browser e l’XML Validator indica la riga e la colonna del primo errore (due strumenti gratuiti, in inglese).
Formattare XML in Notepad++ con XML Tools
Notepad++ non ha un formattatore XML integrato. Il plugin gratuito XML Tools lo aggiunge.
- Apri Plugins > Plugins Admin.
- Nella scheda Available, cerca «XML Tools», spunta la casella e fai clic su Install. Notepad++ si riavvia.
- Apri il file XML e scegli Plugins > XML Tools > Pretty print, oppure premi Ctrl+Alt+Maiusc+B.
Lo stesso menu ha delle varianti. Pretty print - indent attributes (Ctrl+Alt+Maiusc+A) mette anche ogni attributo su una riga propria, utile con elementi lunghi come un tracciato SVG o una voce di configurazione. Pretty print - indent only corregge l’indentazione senza aggiungere a capo. Linearize (Ctrl+Alt+Maiusc+L) fa il contrario: rimette tutto il documento su una riga, comodo prima di incollare XML in un test o in una stringa.
Se la scorciatoia sembra non fare nulla, esegui Plugins > XML Tools > Check XML syntax now: segnala il primo errore del file. E se XML Tools non compare in Plugins Admin, il suo README descrive l’installazione manuale: crea una cartella XMLTools nella cartella plugins di Notepad++, copiaci XMLTools.dll e riavvia.
Indentare XML in VS Code con l’estensione XML
VS Code formatta JavaScript, TypeScript, JSON, HTML e CSS senza installare nulla, ma non l’XML. Se lanci Format Document su un file XML senza estensione, VS Code ti avvisa che non c’è nessun formattatore installato per i file XML.
- Apri la vista Estensioni (Ctrl+Maiusc+X), cerca «XML» e installa XML di Red Hat. Dalla versione 0.15 funziona senza Java.
- Apri il file e premi Maiusc+Alt+F su Windows, Maiusc+Opzione+F su macOS o Ctrl+Maiusc+I su Linux. Format Document è anche nella palette dei comandi (Ctrl+Maiusc+P).
- Per formattare solo una parte del file, selezionala e usa Format Selection (Ctrl+K Ctrl+F).
Se un’altra estensione installata formatta anch’essa l’XML, VS Code ti chiede quale usare. Per fissare la scelta, impostare l’indentazione solo per l’XML e formattare a ogni salvataggio, aggiungi questo al tuo settings.json:
"[xml]": {
"editor.defaultFormatter": "redhat.vscode-xml",
"editor.tabSize": 2,
"editor.formatOnSave": true
}
L’estensione di Red Hat prende l’indentazione da editor.tabSize e editor.insertSpaces. Le sue impostazioni iniziano con xml.format.: xml.format.splitAttributes decide se gli attributi vanno su righe separate, e xml.format.maxLineWidth fissa la larghezza massima delle righe, 100 caratteri per impostazione predefinita, o nessun limite con 0.
Formattare XML da riga di comando con xmllint
xmllint fa parte di libxml2. macOS lo include già. Su Debian e Ubuntu si trova nel pacchetto libxml2-utils, e su Windows la strada più semplice è WSL con lo stesso comando:
sudo apt install libxml2-utils
Poi:
xmllint --format input.xml # mostra l'XML formattato
xmllint --format --output pulito.xml input.xml # lo scrive in un nuovo file
curl -s https://example.com/sitemap.xml | xmllint --format - # legge da una pipe
Non scrivere xmllint --format file.xml > file.xml: la shell svuota il file prima che xmllint lo legga, e lo perdi. Scrivi in un nuovo file, poi rinominalo.
L’indentazione predefinita è di due spazi. La variabile d’ambiente XMLLINT_INDENT la cambia:
XMLLINT_INDENT=" " xmllint --format input.xml # quattro spazi
XMLLINT_INDENT=$'\t' xmllint --format input.xml # tabulazioni, in bash
--format scarta gli spazi già presenti tra gli elementi prima di indentare di nuovo, quindi un file indentato male a mano esce pulito. Quando l’XML non è ben formato, xmllint stampa il nome del file, la riga e l’errore, ed esce con un codice diverso da zero. Per questo è un buon controllo in uno script o in una pipeline di CI. Per verificare un file senza stamparlo, usa xmllint --noout input.xml.
Indentare XML in Python: minidom, ElementTree e lxml
Nella libreria standard, il modo più rapido è xml.dom.minidom:
from xml.dom import minidom
dom = minidom.parse("input.xml")
print(dom.toprettyxml(indent=" "))
Ci sono due trappole. Su un file che ha già degli a capo, toprettyxml() conserva i vecchi spazi e aggiunge i suoi, e compaiono righe vuote tra gli elementi. Nel nostro test con Python 3.14, un piccolo file già indentato è uscito con righe vuote intorno a ogni figlio della radice. E senza l’argomento encoding, la dichiarazione che scrive non indica la codifica: <?xml version="1.0" ?>. Passa encoding="UTF-8" per ottenere byte con la codifica dichiarata.
Da Python 3.9, xml.etree.ElementTree.indent() evita la prima trappola, perché sostituisce gli spazi tra gli elementi invece di aggiungerne altri:
import xml.etree.ElementTree as ET
tree = ET.parse("input.xml")
ET.indent(tree, space=" ")
tree.write("pulito.xml", encoding="UTF-8", xml_declaration=True)
Con lxml (pip install lxml), pretty_print=True indenta solo gli elementi che non hanno ancora spazi intorno. La FAQ di lxml spiega il motivo e dà la soluzione: leggere il file con remove_blank_text=True.
from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse("input.xml", parser)
tree.write("pulito.xml", pretty_print=True, xml_declaration=True, encoding="UTF-8")
Senza questa opzione, il nostro file di prova ha tenuto il suo elemento su una sola riga. lxml è anche la libreria dei nostri esempi di XSLT lato server con Python: uno script che trasforma file può formattare il risultato nello stesso passaggio.
Leggere un file XML lungo senza riformattarlo
Formattare serve per modificare e per avere differenze pulite in Git. Per leggere un file lungo, una vista che ripiega la struttura è spesso più veloce che scorrere migliaia di righe indentate, e non tocca il file.
Chrome mostra i file XML locali e online come un albero indentato, senza configurare nulla. XMLNest, visualizzatore XML per Chrome, disponibile sul Chrome Web Store, aggiunge la chiusura dei nodi, la ricerca nei nomi e nei valori, una vista del sorgente con i numeri di riga, e la riga e la colonna dell’errore quando un file è danneggiato. Così sai dove guardare prima di aprire il file in Notepad++ o VS Code per correggerlo.
Fonti
- Notepad++ User Manual: Plugins (verificata il 20 ottobre 2026)
- XML Tools per Notepad++, README e codice dei menu di morbac/xmltools su GitHub (verificata il 20 ottobre 2026)
- Documentazione di Visual Studio Code: Basic editing, Formatting (verificata il 20 ottobre 2026)
- Visual Studio Marketplace: XML di Red Hat (verificata il 20 ottobre 2026)
- Documentazione di vscode-xml: Formatting (verificata il 20 ottobre 2026)
- libxml2: pagina di manuale di xmllint (verificata il 20 ottobre 2026)
- Pacchetti Debian: libxml2-utils (verificata il 20 ottobre 2026)
- Documentazione di Python: xml.dom.minidom (verificata il 20 ottobre 2026)
- Documentazione di Python: xml.etree.ElementTree, indent() (verificata il 20 ottobre 2026)
- FAQ di lxml: Why doesn't the pretty_print option reformat my XML output? (verificata il 20 ottobre 2026)
- Test di XMLNest : Testato da XMLNest il 20 ottobre 2026 con Python 3.14.3 e lxml 6.0.2, su un file la cui radice conteneva un elemento figlio scritto su una sola riga sotto un'indentazione esistente: toprettyxml(indent=" ") di minidom ha aggiunto righe vuote intorno al figlio e ha scritto <?xml version="1.0" ?> senza codifica; ElementTree.indent() ha dato un'indentazione pulita di due spazi; lxml con pretty_print=True ha lasciato il figlio su una riga e lo ha indentato dopo aver letto il file con remove_blank_text=True (verificata il 20 ottobre 2026)