我使用python生成一个冗长且丑陋的XML字符串,我需要通过漂亮的打印机对其进行过滤以使其看起来更好。
我发现this post用于python漂亮的打印机,但是我必须将XML字符串写入要回读的文件以使用工具,如果可能的话我想避免使用这些工具。
哪些可用于字符串的python漂亮工具可用?
答案 0 :(得分:16)
以下是如何从文本字符串解析为lxml结构化数据类型。
Python 2:
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)
Python 3:
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).decode())
输出:
<parent>
<child>text</child>
<child>other text</child>
</parent>
答案 1 :(得分:5)
我使用lxml库,就像
一样简单>>> print(etree.tostring(root, pretty_print=True))
您可以使用任何etree
执行该操作,您可以通过编程方式生成,也可以从文件中读取。
如果你正在使用PyXML中的DOM,那就是
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
答案 2 :(得分:1)
这是一个Python3解决方案,它摆脱了丑陋的换行符问题(大量的空白),并且它仅使用标准库,与大多数其他实现不同。您提到您已经有一个xml字符串,所以我假设您使用了xml.dom.minidom.parseString()
使用以下解决方案,您可以避免首先写入文件:
import xml.dom.minidom
import os
def pretty_print_xml_given_string(input_string, output_xml):
"""
Useful for when you are editing xml data on the fly
"""
xml_string = input_string.toprettyxml()
xml_string = os.linesep.join([s for s in xml_string.splitlines() if s.strip()]) # remove the weird newline issue
with open(output_xml, "w") as file_out:
file_out.write(xml_string)
我发现了如何解决常见的换行问题here。