2010-10-20 11 views
6

Ich erzeuge eine lange und hässliche XML-Zeichenfolge mit Python, und ich muss es durch hübsche Drucker um besser aussehen zu filtern.Python Pretty XML-Drucker für XML-String

Ich fand this post für Python hübsche Drucker, aber ich muss die XML-Zeichenfolge in eine Datei schreiben, um zurück gelesen werden, um die Werkzeuge zu verwenden, die ich wenn möglich vermeiden möchte.

Welche Python Pretty Tools, die auf Zeichenfolge funktioniert sind verfügbar?

+0

Which Python XML-Bibliothek verwenden Sie? –

+0

@Paul: Ich verwende "von XML.dom Import Minidom". – prosseek

Antwort

13

Hier ist, wie aus einer Textzeichenfolge in dem lxml strukturierten Datentyp zu analysieren.

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) 

Ausgänge:

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

Ich hatte einige Escape-Probleme und die "etree.tounicode" -Methode löste es – mut1na

+1

Mit Python 3 verwenden Sie 'print (etree.tostring (tree, pretty_print = True) .decode())'. – orodbhen

5

Ich benutze die lxml Bibliothek, und dort ist es so einfach wie

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

Sie können diese Operation tun, um jeden etree verwenden, die Sie entweder programmatisch erzeugen können, oder aus einer Datei lesen.

Wenn Sie das DOM aus PyXML verwenden, ist es

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

, die auf die Standardausgabe druckt, es sei denn, Sie einen alternativen Strom angeben.

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

direkt Um die minidom verwenden, können Sie die toprettyxml() Funktion verwenden möchten.

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

+0

Es sieht so aus, dass sowohl root als auch doc strukturierte Daten sind, keine Zeichenfolge. Danke für die Antwort. – prosseek

+0

Wenn Ihre XML-Datei als Minidom-Knoten existiert, können Sie die Funktion 'toprettyxml()' verwenden. Wenn es wirklich nur als String existiert, müssen Sie es analysieren, bevor Sie es schön ausdrucken können. –