<p>我在找完全一样的东西,我发现了这个帖子。(xml.dom.minidom中提供的缩进破坏了我用来操作xml的另一个工具,我需要缩进它)我用一个稍微复杂一点的示例尝试了接受的解决方案,结果是:</p>
<pre><code>In [1]: import pxdom
In [2]: xml = '<a><b>fda</b><c><b>fdsa</b></c></a>'
In [3]: doc = pxdom.parseString(xml)
In [4]: doc.domConfig.setParameter('format-pretty-print', True)
In [5]: print doc.pxdomContent
<?xml version="1.0" encoding="utf-16"?>
<a>
<b>fda</b><c>
<b>fdsa</b>
</c>
</a>
</code></pre>
<p>打印得很漂亮的XML格式不正确,而且我不太喜欢猴子补丁(即我几乎不知道它的意思,也不知道它的坏处),所以我寻找了另一种解决方案。</p>
<p>我正在将输出写入文件,以便可以为Ubuntu使用xmldindent程序($sudo aptitude install xmldindent)。所以我只需将未格式化的写入文件,然后从python程序中调用xmldindent:</p>
<pre><code>from subprocess import Popen, PIPE
Popen(["xmlindent", "-i", "2", "-w", "-f", "-nbe", file_name],
stderr=PIPE,
stdout=PIPE).communicate()
</code></pre>
<p>-w开关会导致文件被覆盖,但令人恼火的是,它会留下一个名为“myfile.xml~”的文件,您可能希望将其删除。其他的开关在那里,以获得正确的格式(为我)。</p>
<p>p.S.xmlindent是流格式化程序,即您可以按如下方式使用它:</p>
<pre><code>cat myfile.xml | xmlindent > myfile_indented.xml
</code></pre>
<p>因此,如果需要,您可以在python脚本中使用它,而无需编写文件。</p>