私はまったく同じものを探していました、そして私はこのポストに出くわしました。(xml.dom.minidomで提供されるインデントは、XMLを操作するために使用していた別のツールを壊し、インデントする必要がありました)少し複雑な例で受け入れられたソリューションを試しましたが、これが結果でした:
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>
きれいに印刷されたXMLは正しくフォーマットされておらず、モンキーパッチについてはあまり満足していません(つまり、それが何を意味するのかほとんどわからず、悪いことを理解しています)。そこで、別の解決策を探しました。
出力をファイルに書き込んでいるので、Ubuntu用のxmlindentプログラム($ sudo aptitude install xmlindent)を使用できます。したがって、フォーマットされていないファイルをファイルに書き込んでから、Pythonプログラム内からxmlindentを呼び出します。
from subprocess import Popen, PIPE
Popen(["xmlindent", "-i", "2", "-w", "-f", "-nbe", file_name],
stderr=PIPE,
stdout=PIPE).communicate()
-wスイッチを指定すると、ファイルが上書きされますが、「myfile.xml〜」などの名前が付けられたままになります。これはおそらく削除する必要があります。他のスイッチは、フォーマットを正しくするためにあります(私にとって)。
PS xmlindentはストリームフォーマッタです。つまり、次のように使用できます。
cat myfile.xml | xmlindent > myfile_indented.xml
したがって、必要に応じて、ファイルに書き込むことなくPythonスクリプトで使用できる可能性があります。