25

私は、xml ファイルを整形するために minidom.toprettyxml を使用しています。XMLファイルを作成してこのメ​​ソッドを使用すると、すべてうまくいきますが、xmlファイルを変更した後に使用すると(たとえば、追加のノードを追加した場合)、XMLに書き戻します、私は空行を取得しています、更新するたびに、空行がどんどん増えています...

私のコード:

file.write(prettify(xmlRoot))


def prettify(elem):
    rough_string = xml.tostring(elem, 'utf-8') //xml as ElementTree
    reparsed = mini.parseString(rough_string) //mini as minidom
    return reparsed.toprettyxml(indent=" ")

そして結果:

<?xml version="1.0" ?>
<testsuite errors="0" failures="3" name="TestSet_2013-01-23 14_28_00.510935" skip="0"     tests="3" time="142.695" timestamp="2013-01-23 14:28:00.515460">




    <testcase classname="TC test" name="t1" status="Failed" time="27.013"/>




    <testcase classname="TC test" name="t2" status="Failed" time="78.325"/>


    <testcase classname="TC test" name="t3" status="Failed" time="37.357"/>
</testsuite>

助言がありますか ?

ありがとう。

4

7 に答える 7

29

ここで解決策を見つけました: http://code.activestate.com/recipes/576750-pretty-print-xml/

次に、ファイルの代わりに文字列を取るように変更しました。

from xml.dom.minidom import parseString

pretty_print = lambda data: '\n'.join([line for line in parseString(data).toprettyxml(indent=' '*2).split('\n') if line.strip()])

出力:

<?xml version="1.0" ?>
<testsuite errors="0" failures="3" name="TestSet_2013-01-23 14_28_00.510935" skip="0" tests="3" time="142.695" timestamp="2013-01-23 14:28:00.515460">
  <testcase classname="TC test" name="t1" status="Failed" time="27.013"/>
  <testcase classname="TC test" name="t2" status="Failed" time="78.325"/>
  <testcase classname="TC test" name="t3" status="Failed" time="37.357"/>
</testsuite>

これにより、関数に組み込むのが少し簡単になります。

def new_prettify():
    reparsed = parseString(CONTENT)
    print '\n'.join([line for line in reparsed.toprettyxml(indent=' '*2).split('\n') if line.strip()])
于 2013-01-24T04:29:22.817 に答える