2013-07-01 78 views
35

我想用xml.etree.elementtree用Python寫出xml文件。問題在於它們始終在一行中生成。我希望能夠輕鬆地引用它們,所以如果可能的話,我真的很希望能夠清楚地寫出它們。使用xml.etree.elementtree打印格式良好的xml文件

這是我得到

<Language><En><Port>Port</Port><UserName>UserName</UserName></En><Ch><Port>IP地址</Port><UserName>用戶名稱</UserName></Ch></Language> 

這是我想看到的。

<Language> 
    <En> 
     <Port>Port</Port> 
     <UserName>UserName</UserName> 
    </En> 
    <Ch> 
     <Port>IP地址</Port> 
     <UserName>用戶名稱</UserName> 
    </Ch> 
</Language> 
+30

這是不是一個真正的副本:另一個問題留下使用_any_ XML庫的可能性。當您已經在使用_built-in元素tree_庫時,此問題特別要求提供解決方案。 Imho爲這個圖書館專門提出這個問題非常有意義,因爲它顯然是一個缺失的功能!? – bluenote10

+1

你可以使用像我在這裏找到的功能:http://effbot.org/zone/element-lib.htm#prettyprint –

+0

@ bluenote10當有人報告時,其他人會重新報告,只是爲了追隨某些東西。我來自哥倫比亞,很抱歉我的英語不好。 –

回答

51

您可以使用函數toprettyxmlxml.dom.minidom爲了做到這一點:

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") 

的想法是打印Element在一個字符串,分析它使用minidom命名,並使用XML再次將其轉換功能toprettyxml

來源:http://pymotw.com/2/xml/etree/ElementTree/create.html

+9

這增加了額外的線條。我不確定我會說那麼漂亮。 –

+4

對於大文件,雖然這需要重新整理整個XML。嗯... –

15

你可以使用這個庫lxml,這是ElementTree的一個超集。它 toString()方法包括參數pretty_print - 例如:

>>> print(etree.tostring(root, pretty_print=True)) 
<root> 
    <child1/> 
    <child2/> 
    <child3/> 
</root> 
相關問題