2012-03-15 10 views
0

私はPythonを使用してデータを.xmlファイルに書き込みます。私はこのファイルをstatistics.xmlという名前で持っていて、私のメソッド 'writeIntoXml()'を呼び出すたびにその統計xmlファイルにデータを追加する必要があります。今度はPythonがこれを完全に行いますが、唯一の問題は、新しいデータを書き込む前に、ファイル内にあったすべての要素の間に不要な空白を追加することです。このように:Python minidom不要な空白

<AantalTicketsPerUur> 
    <Dag datum="2012-03-16"> 
     <Aantal_tickets Aantal="24" uurinterval="0u-1u"/> 
     <Aantal_tickets Aantal="68" uurinterval="1u-2u"/> 
     <Aantal_tickets Aantal="112" uurinterval="2u-3u"/> 
     <Aantal_tickets Aantal="98" uurinterval="3u-4u"/> 
    </Dag> 
</AantalTicketsPerUur> 

は、この(その空白のない要素挟ん新しいデータがある)となる:

<AantalTicketsPerUur> 


    <Dag datum="2012-03-16"> 


     <Aantal_tickets Aantal="24" uurinterval="0u-1u"/> 


     <Aantal_tickets Aantal="68" uurinterval="1u-2u"/> 


     <Aantal_tickets Aantal="112" uurinterval="2u-3u"/> 


     <Aantal_tickets Aantal="98" uurinterval="3u-4u"/> 


    </Dag> 


    <Dag datum="2012-03-16"> 
     <Aantal_tickets Aantal="24" uurinterval="0u-1u"/> 
     <Aantal_tickets Aantal="68" uurinterval="1u-2u"/> 
     <Aantal_tickets Aantal="112" uurinterval="2u-3u"/> 
     <Aantal_tickets Aantal="98" uurinterval="3u-4u"/> 
    </Dag> 
</AantalTicketsPerUur> 

私はこの問題を解決するにはどうすればよいですか?注:私は.toprettyxml()メソッドにあなたが代わりにフォーマットを変更しませんtoprettyxmlのtoxmlを使用する場合があります事前

答えて

1

おかげで使用していますか:

def write_xml(filename, dom): 
    f = open(filename, "w") 
    f.write(dom.toxml("utf-8")) 
    f.close() 
0

を私は答えに同意しますqgiから。しかし、2つの方法は、ルート要素の外側で見つかったコメントに関して、逆の癖があるように見えることに注意してください。例えば、私はminidomと、このXMLファイルを解析する場合...

<?xml version="1.0" encoding="utf-8"?> 

<!-- testing 1 --> 
<!-- testing 2 --> 

<sources autodelete="false" syncmedia="true" multivalue_separator=";; "> 

    <!-- testing 3 --> 
    <source 
     id_field="Lex GUID" 
     source_audio_folder="samples/audio" 
     source_image_folder="samples/pictures" > 
     <source_field anki_field="Lex GUID" /> 
    </source> 

    <!-- Test blah blah 
     blah blah 
     blah 
    --> 
    <source 
     id_field="Example" 
     source_audio_folder="samples/audio" 
     source_image_folder="samples/pictures" > 
     <source_field anki_field="Example" /> 

    </source> 

</sources> 

<!-- test THE END --> 

は...とは私はtoxmlはうまくそれらの外側部分を保持し、2つの異なるファイルとして保存します(しかし、ルート内の何もない)、およびtoprettyxmlルート内の部品のみを保存します。私はPython 2.7 BTWを使用しています。ここで( 'かわいい')tmp1.xmlです:

<?xml version="1.0" encoding="utf-8"?><!-- testing 1 --><!-- testing 2 --><sources autodelete="false" multivalue_separator=";; " syncmedia="true"> 

    <!-- testing 3 --> 
    <source id_field="Lex GUID" source_audio_folder="samples/audio" source_image_folder="samples/pictures"> 
     <source_field anki_field="Lex GUID"/> 
    </source> 

    <!-- Test blah blah 
     blah blah 
     blah 
    --> 
    <source id_field="Example" source_audio_folder="samples/audio" source_image_folder="samples/pictures"> 
     <source_field anki_field="Example"/> 

    </source> 

</sources><!-- test THE END --> 

は...と、ここでtmp2.xml(無地のtoString)です:

<?xml version="1.0" encoding="utf-8"?> 
<!-- testing 1 --> 
<!-- testing 2 --> 
<sources autodelete="false" multivalue_separator=";; " syncmedia="true"> 



    <!-- testing 3 --> 


    <source id_field="Lex GUID" source_audio_folder="samples/audio" source_image_folder="samples/pictures"> 


     <source_field anki_field="Lex GUID"/> 


    </source> 



    <!-- Test blah blah 
     blah blah 
     blah 
    --> 


    <source id_field="Example" source_audio_folder="samples/audio" source_image_folder="samples/pictures"> 


     <source_field anki_field="Example"/> 



    </source> 



</sources> 
<!-- test THE END --> 

念のため、ここで生産Pythonのコードがあります

import xml.dom.minidom as minidom 
tree = minidom.parse(file_path) 
s1 = tree.toxml('utf-8') 
s2 = tree.toprettyxml(' ', '\n', 'utf-8') 
with open ('tmp1.xml', mode='w') as outfile: # Python 3 would also allow: encoding='utf-8' 
    outfile.write(s1.encode('utf-8')) 
with open ('tmp2.xml', mode='w') as outfile: 
    outfile.write(s2.encode('utf-8')) 
+0

両方の方法で改行が一貫していないように見えることがあります(時にはCRとして、時にはCR LF;別名\ rまたは\ r \ n)。良いニュースは、toprettyxml()からの出力を読み込み、*同一の書式で元に戻すことができるということです。これは、各要素間に必要な3〜4行の空白行 –

関連する問題