Python minidom不需要的空格

时间:2012-03-15 23:20:25

标签: python xml parsing minidom

我正在使用Python将数据写入.xml文件。我有这个名为statistics.xml的文件,每当我调用我的方法'writeIntoXml()'时,它应该将数据添加到该统计信息xml文件中。现在Python完美地做到了这一点,唯一的问题是它在我将新数据写入文件之前在文件中的所有元素之间添加了不需要的空格。像这样:

<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()方法

提前致谢

2 个答案:

答案 0 :(得分:1)

您可能希望使用toxml而不是toprettyxml,而不会修改格式:

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

答案 1 :(得分: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(plain 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'))