使用python格式化插入的元素xml.etree模块,包括新行

2021-06-15 00:25:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一个元素插入到一个大的xml文件中。我希望插入的元素位于顶部(所以我需要使用根.插入方法,并且不能仅附加到文件中)。我也希望元素的格式与文件的其余部分相匹配。在

原始XML文件的格式为

<a>
    <b>
        <c/>
    </b>
    <d>
        <e/>
    </d>
    ....
</a>

然后运行以下代码:

^{pr2}$

它以以下形式创建输出:

<a>
    <b>
        <c/>
    </b>
    <f><g/></f><d>
        <e/>
    </d>
    ....
</a>

但我希望它的形式是:

<a>
    <b>
        <c/>
    </b>
    <f>
        <g/>
    </f>
    <d>
        <e/>
    </d>
    ....
</a>

使用jonathaneunice的解决方案“如何让Python的ElementTree漂亮地打印到XML文件?”我添加了以下代码来替换XML文件.write命令:

from xml.dom import minidom
xmlstr = minidom.parseString(ET.tostring(a)).toprettyxml(indent="   ")
with open("New_Database.xml", "w") as f:
    f.write(xmlstr)

但是整个文件的格式仍然不正确。它可以正确设置新元素的格式,但原始元素现在间隔开了:

<b>


    <c/>


</b>


<f>
    <g/>
</f>
<c>


    <d/>


</c>
....
</a>

我认为这是因为toprettyxml()命令在分隔符'\n'处添加了一个新行(因此在当前格式中添加了两个新行)。修改输入只会改变添加的元素或原始元素的格式是否错误。我需要一个方法来修改新元素或原始元素,然后再添加新元素,使它们的格式相同,然后我可以在打印前重新格式化整个批次?是否可以使用'xml.etree.ElementTree'? 在

提前谢谢。在

1条回答
网友
1楼 ·

可以使用^{} and ^{}属性来处理空白。也许这对你来说已经够好了。见下面的演示。在

输入文件:

<a>
    <b>
        <c/>
    </b>
    <d>
        <e/>
    </d>
</a>

代码:

^{pr2}$

输出:

<a>
    <b>
        <c />
    </b>
    <f>
        <g />
    </f>
    <d>
        <e />
    </d>
</a>

相关问题