Как отмечали другие, в lxml встроен симпатичный принтер.
Имейте в виду, что по умолчанию он изменяет разделы CDATA на обычный текст, что может привести к неприятным результатам.
Вот функция Python, которая сохраняет входной файл и изменяет только отступ (обратите внимание на strip_cdata=False
). Кроме того, он гарантирует, что вывод использует UTF-8 в качестве кодировки вместо ASCII по умолчанию (обратите внимание на 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')
Пример использования:
prettyPrintXml('some_folder/some_file.xml')