Python ElementTree で XML の改行を制御する方法

 moriya -  ~

ElementTree とは

ElementTree は Python の標準ライブラリの一つで、XML データの解析や生成を行うためのシンプルかつ効率的なツールです。DOM や SAX と比べて、より Python らしい直感的な API を提供します。

改行の問題

ElementTree で XML を出力する際、デフォルトでは改行が適切に挿入されません。これにより、生成された XML ファイルが1行の長い文字列となってしまい、可読性が低下するという問題があります。

解決方法

Python 3.9 以降では、ElementTree.indent() メソッドを使用して XML を整形できます:

import xml.etree.ElementTree as ET

# XMLツリーの作成
root = ET.Element('root')
child = ET.SubElement(root, 'child')
child.text = 'Hello, World!'

# もっと簡単には、
# root = ET.fromstring("<?xml version='1.0' encoding='utf-8'?><root><child>Hello, World!</child></root>")
# のようにする方法もある。

# インデントの追加
ET.indent(root)

# 出力
tree = ET.ElementTree(root)
tree.write('output.xml', encoding='utf-8', xml_declaration=True)

参照  

ベストプラクティス

  1. Python 3.9 以降を使用している場合は、ET.indent() を使用することを推奨します。これが最も簡単で標準的な方法です。

  2. XML宣言が必要な場合は、write() メソッドで xml_declaration=True を指定します:

tree.write('output.xml', encoding='utf-8', xml_declaration=True)
  1. エンコーディングは常に明示的に指定することをお勧めします(通常は UTF-8)。

まとめ

ElementTree は強力な XML 処理ツールですが、デフォルトでは改行が適切に挿入されません。しかし、上記の方法を使用することで、可読性の高い整形された XML を生成することができます。