繁体   English   中英

如何在Python中漂亮地打印xml文件?

[英]How to pretty print an xml file in Python?

我想使用lxml整理一个复杂的xml文件。 问题在于它有很多带有尾巴的元素。 例如,有一个这样的xml:

 <body><part>n</part> attend </body>

我想把它整理成这样:

 <body>
    <part>n</part> attend 
 </body>

我最初尝试在lxml中使用带有remove_blank_text解析器的pretty_print。 但是失败了。

import lxml.etree as ET
xml_doc = '<body><part>n</part> attend </body>'
parser = ET.XMLParser(remove_blank_text=True)
root = ET.fromstring(xml_doc, parser)
print(ET.tostring(root, pretty_print=True))
>>>b'<body><part>n</part> attend </body>\n'

然后,我再次尝试,但没有应用解析器无济于事。

import lxml.etree as ET
xml_doc = '<body><part>n</part> attend </body>'
root = ET.fromstring(xml_doc)
print(ET.tostring(root, pretty_print=True))
>>>b'<body><part>n</part> attend </body>\n'

如果pretty_print属性没有帮助,则可能可以编写自己的递归方法来进行漂亮的打印。 一些东西


def pprint(root, indentTabs = 0):
    print "<%s%s>" % (indentTabs*"\t", root.tag)
    print (indentTabs+1)*"\t" + root.value
    for element in root.children():
        pprint (element, indentTabs+1)
    print "</%s%s>" % (indentTabs*"\t", root.tag)

虽然可能已经有一些可用的选项。 上面的方法只处理标签。 如果xml属性存在于xml中,则可能还需要添加代码来处理xml属性。

编辑:上面将以格式打印

<tag>
    text
</tag>

您可以根据需要的输出进一步对其进行修改。

我遇到了同样的问题,并使用tounicode()为我解决了这个问题。

print(ET.tounicode(root, pretty_print=True))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM