ElementTree XML API : シンプルで軽量の XML プロセッサ
Python 2.5 で ElementTree XML API が導入されました。
また Python 2.7 では ElementTree API はバージョン 1.3 になりました。それまでの 1.2.6 から大きく書き換えるというものではなく、便利な関数の追加、パフォーマンスの改善などの素直なアップデートになっています。
ElementTree XML API の基本的な利用方法
さっそく ElementTree XML API を利用した XML ドキュメントの作成を行ってみましょう。
import xml.etree.ElementTree as ET
# XML ドキュメントの作成
states = ET.Element('states')
ca = ET.SubElement(states, 'state', {'name':'CA'})
ca.text = '<Hello> world!'
tx = ET.SubElement(states, 'state', {'name':'TX'})
hi = ET.SubElement(states, 'state', {'name':'HI'})
sea = ET.SubElement(hi, 'beach', {'x': 'Hawaii Kai'})
ET.dump(states)
この結果、次の文字列が出力されます(改行は見やすいようにいれているだけで、実際は入っていませんが)。
<states> <state name="CA"><Hello> world!</state> <state name="TX" /> <state name="HI"><beach x="Hawaii Kai" /></state> </states>
xml.etree.ElementTree クラスを ET としてインポート。そして ET.Element という Element のファクトリーメソッドを呼んで Element オブジェクトを作っています。さらに、 SubElement ファクトリーメソッドで子要素 (子ノード) を作成・追加しています。
Element の text に文字を代入しています。結果の出力を見るとわかるように、 '<' というタグに使う文字を(わざと)使っていますが、実体参照 "<" に変換されています。
また日本語が混ざるときなどは、UTF-8 で統一することで正常にエンコードできます。このときソースコードにて "coding: utf-8" を指定してください。
結果を出力するのに dump メソッドを呼んでいます。
ファイルへの書き出しは次の通りです。
tree = ET.ElementTree(states)
tree.write('states.xml')
まず、上の例でルート要素となる "states" 要素を ElementTree オブジェクトでラップします。
そして、ElementTree の write メソッドに出力するファイル名を渡すとそのファイルに XML を出力します。
属性のイテレータの利用は次のようにできます。
# Iterate
for s in states:
print s.attrib
この結果は次のように出力されます。
{'name': 'CA'} {'name': 'TX'} {'name': 'HI'}