2010-10-20 14 views
6

Genero una cadena XML larga y fea con python, y necesito filtrarla a través de una bonita impresora para que se vea mejor.Impresora XML bonita de Python para cadena XML

Encontré this post para las impresoras bonitas de python, pero tengo que escribir la cadena XML en un archivo que se leerá para utilizar las herramientas, lo que quiero evitar si es posible.

¿Qué herramientas bonitas de python que funcionan en una cadena están disponibles?

+0

qué biblioteca está usando XML Python? –

+0

@Paul: uso "de xml.dom import minidom". – prosseek

Respuesta

13

Así es como va a analizar a partir de una cadena de texto al lxml estructurado tipo de datos.

from lxml import etree 
xml_str = "<parent><child>text</child><child>other text</child></parent>" 
root = etree.fromstring(xml_str) 
print etree.tostring(root, pretty_print=True) 

Salidas:

<parent> 
    <child>text</child> 
    <child>other text</child> 
</parent> 
+1

estaba teniendo algunos problemas de escape y el método 'etree.tounicode' lo resolvió – mut1na

+1

Con Python 3, use' print (etree.tostring (tree, pretty_print = True) .decode()) '. – orodbhen

5

que utilizan la biblioteca lxml, y no es tan simple como

>>> print(etree.tostring(root, pretty_print=True)) 

Puede hacerlo utilizando cualquier operación etree, que se puede generar ya sea mediante programación, o leer desde un archivo.

Si está usando el DOM de PyXML, es

import xml.dom.ext 
xml.dom.ext.PrettyPrint(doc) 

que imprime en la salida estándar, a menos que especifique una corriente alterna.

http://pyxml.sourceforge.net/topics/howto/node19.html

utilizar directamente los minidom, desea utilizar la función toprettyxml().

http://docs.python.org/library/xml.dom.minidom.html#xml.dom.minidom.Node.toprettyxml

+0

Parece que tanto el directorio raíz como el documento son datos estructurados, no una cadena. Gracias por la respuesta. – prosseek

+0

Si su xml existe como un nodo minidomo, puede usar la función 'toprettyxml()'. Si realmente solo existe como una cadena, tendrá que analizarlo antes de que pueda imprimirlo bastante. –