2013-07-01 4 views
35

xml.etree.elementtreeを使ってPythonでxmlファイルを書き出そうとしています。問題は、1行で生成され続けることです。可能であれば、私が本当に書いたものをきちんと手に入れたいと思ったら、簡単にそれらを参照できるようにしたい。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ライブラリを使用する可能性を残し例えば - その のtoString()メソッドは、パラメータpretty_printが含まれています。この質問は、あなたが_built-in要素tree_ライブラリを使ってすでに作業しているときの解決策を具体的に求めています。 Imhoそれは明らかに不足している機能なので、このライブラリのためにこの質問を具体的に尋ねるのが理にかなっています! – bluenote10

+1

ここで見つけたような機能を使うことができます:http://effbot.org/zone/element-lib.htm#prettyprint –

+0

@ bluenote10誰かが報告すると、他の人が何かを追跡するためにただちに報告します。私はコロンビア出身ですので、私の悪い英語には申し訳ありません。 –

答えて

51

あなたはそれを行うためにxml.dom.minidomから機能toprettyxmlを使用することができます。

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

あなたがElementTreeののスーパーセットであるライブラリーlxmlを、使用することができます。

>>> print(etree.tostring(root, pretty_print=True)) 
<root> 
    <child1/> 
    <child2/> 
    <child3/> 
</root> 
関連する問題