2012-03-15 70 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()方法提前

感謝

回答

1

你可能想使用toxml代替toprettyxml不修改格式:

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

我的答案同意來自qgi。但請注意,這兩種方法對於在根元素之外發現的評論似乎有着相反的怪癖。例如,如果我用解析這個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用於那些精美的外側部分(但沒有根內側),和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個空行 – 2014-02-01 22:08:55