La solución más sencilla es probablemente utilizando lxml, donde se puede establecer una opción de analizador de ignorar el espacio en blanco entre los elementos:
>>> from lxml import etree
>>> parser = etree.XMLParser(remove_blank_text=True)
>>> xml_str = '''<root>
>>> <head></head>
>>> <content></content>
>>> </root>'''
>>> elem = etree.XML(xml_str, parser=parser)
>>> print etree.tostring(elem)
<root><head/><content/></root>
esta probablemente será suficiente para sus necesidades, pero algunas advertencias para estar en la caja fuerte lado:
Esto acaba de quitar nodos de espacio en blanco entre los elementos, y tratar de no eliminar nodos de espacio en blanco en el interior de los elementos con contenido mixto:
>>> elem = etree.XML('<p> spam <a>ham</a> <a>eggs</a></p>', parser=parser)
>>> print etree.tostring(elem)
<p> spam <a>ham</a> <a>eggs</a></p>
Los espacios en blanco iniciales o finales de los nodos de texto no se eliminarán. Sin embargo, en algunas circunstancias aún eliminará los nodos de espacios en blanco del contenido mixto: si el analizador aún no ha encontrado nodos que no sean de espacio en blanco en ese nivel.
>>> elem = etree.XML('<p><a> ham</a> <a>eggs</a></p>', parser=parser)
>>> print etree.tostring(elem)
<p><a> ham</a><a>eggs</a></p>
Si usted no quiere eso, se puede utilizar xml:space="preserve"
, que será respetada. Otra opción sería usar un dtd y usar etree.XMLParser(load_dtd=True)
, donde el analizador usará el dtd para determinar qué nodos de espacio en blanco son significativos o no.
Aparte de eso, usted tendrá que escribir su propio código para eliminar el espacio en blanco que no desea (la iteración descendientes, y en su caso, establecer .text
y .tail
propiedades que contienen sólo espacio en blanco a None
o cadena vacía)
Esto puede ayudar usando lxml para eliminar todas las líneas en blanco y los espacios en blanco de nodo de texto http://stackoverflow.com/a/19396130/973699 – DevC