2010-10-20 15 views
6

Generuję długi i brzydki ciąg znaków XML z pythonem, i muszę go przefiltrować przez ładną drukarkę, aby wyglądała lepiej.Python ładna drukarka XML dla łańcucha XML

Znalazłem this post dla ładnych drukarek Pythona, ale muszę napisać ciąg znaków XML do pliku do odczytania, aby móc korzystać z narzędzi, których chcę w miarę możliwości uniknąć.

Jakie narzędzia Pythona są dostępne na sznurku?

+0

Który Python Library używasz XML? –

+0

@Paul: Używam "from xml.dom import minidom". – prosseek

Odpowiedz

13

Oto jak analizować z ciągu tekstowego do lxml strukturze typu danych.

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) 

Wyjścia:

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

Mam pewne problemy z ucieczką i metoda 'etree.tounicode' rozwiązała je – mut1na

+1

Używając Pythona 3, użyj' print (etree.tostring (tree, pretty_print = True) .decode()) '. – orodbhen

5

używam biblioteki lxml, i nie jest to tak proste jak

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

można to zrobić za pomocą dowolnego etree operacji, które można albo wygenerowania programowo lub odczytu z pliku.

Jeśli używasz DOM z PyXML, to

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

która drukuje na standardowe wyjście, chyba że podasz alternatywny strumień.

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

Aby korzystać bezpośrednio z minidom, chcesz korzystać z funkcji toprettyxml().

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

+0

Wygląda na to, że zarówno root, jak i doc są danymi strukturalnymi, a nie ciągiem. Dziękuję za odpowiedź. – prosseek

+0

Jeśli twój plik XML istnieje jako węzeł minidom, możesz użyć funkcji 'toprettyxml()'. Jeśli naprawdę istnieje tylko jako ciąg znaków, musisz go sparsować, zanim będziesz mógł go wydrukować. –