Python 入門

ホーム > XML > ElementTree XML API : シンプルで軽量の XML プロセッサ

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">&lt;Hello&gt; 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 に文字を代入しています。結果の出力を見るとわかるように、 '<' というタグに使う文字を(わざと)使っていますが、実体参照 "&lt;" に変換されています。

また日本語が混ざるときなどは、UTF-8 で統一することで正常にエンコードできます。このときソースコードにて "coding: utf-8" を指定してください。

結果を出力するのに dump メソッドを呼んでいます。

ファイルへの書き出しは次の通りです。

tree = ET.ElementTree(states)
tree.write('states.xml')

まず、上の例でルート要素となる "states" 要素を ElementTree オブジェクトでラップします。

そして、ElementTree の write メソッドに出力するファイル名を渡すとそのファイルに XML を出力します。

ElementTree XML API による XML ファイルへの書き出し

属性のイテレータの利用は次のようにできます。

# Iterate
for s in states:
    print s.attrib

この結果は次のように出力されます。

{'name': 'CA'}
{'name': 'TX'}
{'name': 'HI'}
ホーム > XML > ElementTree XML API : シンプルで軽量の XML プロセッサ