2010-10-20 97 views
6

我用python生成了一個長而醜陋的XML字符串,並且我需要通過漂亮的打印機來過濾它以使其看起來更好。用於XML字符串的Python漂亮XML打印機

我發現this post爲python漂亮打印機,但我必須將XML字符串寫入一個文件以回讀使用的工具,我想要避免,如果可能的話。

對字符串有效的python漂亮工具有哪些?

+0

的Python XML您使用的圖書館嗎? – 2010-10-20 00:06:10

+0

@Paul:我使用「從xml.dom導入minidom」。 – prosseek 2010-10-20 00:07:46

回答

13

以下是如何從文本字符串到lxml的結構化數據類型解析。

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) 

輸出:

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

我有一些轉義問題,'etree.tounicode'方法解決了這個問題 – mut1na 2017-10-11 11:18:28

+1

在Python 3中,使用print(etree.tostring(tree,pretty_print = True).decode())''。 – orodbhen 2018-02-15 14:49:57

5

我使用lxml的圖書館,還有它的那樣簡單

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

你可以使用任何etree,您可以生成程序,或從文件中讀取做操作。

如果您正在使用DOM從的PyXML,它是

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

打印到標準輸出,除非你指定一個備用流。

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

直接使用minidom命名,你要使用的toprettyxml()功能。

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

+0

看起來像root和doc都是結構化數據,而不是字符串。感謝你的回答。 – prosseek 2010-10-20 00:13:13

+0

如果你的xml作爲minidom節點存在,你可以使用'toprettyxml()'函數。如果它真的只是作爲一個字符串存在,你必須先分析它,然後再打印出來。 – 2010-10-20 00:16:46