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)
ベストプラクティス
-
Python 3.9 以降を使用している場合は、
ET.indent()
を使用することを推奨します。これが最も簡単で標準的な方法です。 -
XML宣言が必要な場合は、
write()
メソッドでxml_declaration=True
を指定します:
tree.write('output.xml', encoding='utf-8', xml_declaration=True)
- エンコーディングは常に明示的に指定することをお勧めします(通常は UTF-8)。
まとめ
ElementTree は強力な XML 処理ツールですが、デフォルトでは改行が適切に挿入されません。しかし、上記の方法を使用することで、可読性の高い整形された XML を生成することができます。