Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use xml.etree.ElementTree to print nicely formatted xml files [duplicate]

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 it's possible I would really like to be able to have the file 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> 
like image 379
TheBeardedBerry Avatar asked Jul 01 '13 10:07

TheBeardedBerry


1 Answers

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

like image 106
Maxime Chéramy Avatar answered Oct 17 '22 17:10

Maxime Chéramy