que estaba buscando exactamente lo mismo, y me encontré con este aviso. (La sangría proporcionada en xml.dom.minidom rompió otra herramienta que estaba usando para manipular el XML, y yo necesitaba para tener una sangría) Probé la solución aceptada con un ejemplo un poco más complejo y este fue el resultado:
In [1]: import pxdom
In [2]: xml = '<a><b>fda</b><c><b>fdsa</b></c></a>'
In [3]: doc = pxdom.parseString(xml)
In [4]: doc.domConfig.setParameter('format-pretty-print', True)
In [5]: print doc.pxdomContent
<?xml version="1.0" encoding="utf-16"?>
<a>
<b>fda</b><c>
<b>fdsa</b>
</c>
</a>
El bonito XML impreso no está formateado correctamente, y no estoy muy contento con el parche mono (es decir, apenas sé lo que significa, y entiendo que es malo), así que busqué otra solución.
estoy escribiendo la salida a un archivo, por lo que puede utilizar el programa xmlindent para Ubuntu ($ sudo aptitude install xmlindent). Por lo que acaba de escribir el formateado en el fichero, a continuación, llamar a la xmlindent desde el programa Python:
from subprocess import Popen, PIPE
Popen(["xmlindent", "-i", "2", "-w", "-f", "-nbe", file_name],
stderr=PIPE,
stdout=PIPE).communicate()
La opción -w hace que el archivo se sobrescriba, pero molesto deja una llamada, por ejemplo, "myfile.xml ~" que probablemente quiera eliminar.Los otros interruptores están ahí para obtener el formato correcto (para mí).
P.S. xmlindent es un formateador de flujo, es decir, se puede utilizar de la siguiente manera:
cat myfile.xml | xmlindent > myfile_indented.xml
lo que podría ser capaz de utilizarlo en un script en Python, sin necesidad de escribir en un archivo si necesita.
También me preguntaba esto, pero no estoy satisfecho con la respuesta aceptada, debido a usarlo tengo que instalar pxdom ... –
Con la versión actual de xml.dom.minidom, que error está arreglado ahora – usethedeathstar