Comme d'autres l'ont souligné, lxml dispose d'une imprimante intégrée.
Sachez cependant que, par défaut, il transforme les sections CDATA en texte normal, ce qui peut avoir des résultats désagréables.
Voici une fonction Python qui préserve le fichier d'entrée et ne modifie que l'indentation (remarquez l'élément strip_cdata=False
). De plus, il s'assure que la sortie utilise l'encodage UTF-8 au lieu de l'encodage ASCII par défaut (remarquez le bouton encoding='utf-8'
) :
from lxml import etree
def prettyPrintXml(xmlFilePathToPrettyPrint):
assert xmlFilePathToPrettyPrint is not None
parser = etree.XMLParser(resolve_entities=False, strip_cdata=False)
document = etree.parse(xmlFilePathToPrettyPrint, parser)
document.write(xmlFilePathToPrettyPrint, pretty_print=True, encoding='utf-8')
Exemple d'utilisation :
prettyPrintXml('some_folder/some_file.xml')