2010-10-20 3 views
6

Io genero una stringa XML lunga e brutta con python, e ho bisogno di filtrarla attraverso una bella stampante per avere un aspetto migliore.Stampante Python piuttosto XML per stringa XML

Ho trovato this post per le stampanti python pretty, ma devo scrivere la stringa XML su un file da leggere di nuovo per utilizzare gli strumenti, che voglio evitare se possibile.

Quali strumenti graziosi di python che funzionano sulla stringa sono disponibili?

+0

quale libreria stai usando XML Python? –

+0

@Paul: utilizzo "da minidom di importazione xml.dom". – prosseek

risposta

13

Ecco come analizzare da una stringa di testo nel tipo di dati lxml strutturato.

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) 

Uscite:

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

stavo avendo alcuni problemi di escape e il metodo 'etree.tounicode' lo ha risolto. – mut1na

+1

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

5

Io uso la biblioteca lxml, e lì è così semplice come

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

Si può fare il funzionamento con qualsiasi etree, che è possibile creare a livello di codice, o leggere da un file.

se si sta utilizzando il DOM da PyXML, è

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

che stampa sullo standard output, a meno che non si specifica un flusso alternativo.

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

usare direttamente l'minidom, si desidera utilizzare la funzione toprettyxml().

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

+0

Sembra che sia root che doc siano dati strutturati, non una stringa. Grazie per la risposta. – prosseek

+0

Se il tuo xml esiste come un nodo minidom, puoi usare la funzione 'toprettyxml()'. Se in realtà esiste solo come stringa, dovrai analizzarla prima di poterla stampare. –