问题
This question already has an answer here:
- Pretty printing XML in Python 21 answers
I am trying to use xml.etree.elementtree
to write out xml files with Python. The issue is that they keep getting generated in a single line. I want to be able to easily reference them so if its possible I would really like to be able to have the written out cleanly.
This is what I am getting
<Language><En><Port>Port</Port><UserName>UserName</UserName></En><Ch><Port>IP地址</Port><UserName>用户名称</UserName></Ch></Language>
This is what I would like to see.
<Language>
<En>
<Port>Port</Port>
<UserName>UserName</UserName>
</En>
<Ch>
<Port>IP地址</Port>
<UserName>用户名称</UserName>
</Ch>
</Language>
回答1:
You can use the function toprettyxml() from xml.dom.minidom in order to do that:
def prettify(elem):
"""Return a pretty-printed XML string for the Element.
"""
rough_string = ElementTree.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="\t")
The idea is to print your Element
in a string, parse it using minidom and convert it again in XML using the toprettyxml
function.
Source: http://pymotw.com/2/xml/etree/ElementTree/create.html
回答2:
You could use the library lxml (Note top level link is now spam) , which is a superset of ElementTree. Its tostring() method includes a parameter pretty_print - for example:
>>> print(etree.tostring(root, pretty_print=True))
<root>
<child1/>
<child2/>
<child3/>
</root>
来源:https://stackoverflow.com/questions/17402323/use-xml-etree-elementtree-to-print-nicely-formatted-xml-files