ElementTreeモジュールについて
ElementTreeの使い方。
tags: | python, elementtree, xml, doc, module |
---|---|
created: | 2005-08-18T00:00:00 |
ElementTreeの使い方の基礎 XMLパーサライブラリであるElementTreeの使い方!
特長
ピュアPythonコードで実現されているので、 プラットフォームを選ばず、コンパイルレスで動作します。 (当サイトではCGIサーバにインストールして使っています。)
Pythonオブジェクト形式でアクセス出来るようになっており、 Pythonユーザには扱いやすい。
おんなじスペックで速度が必要ならcElementTreeというモジュールもあるようです。
Python2.5以降では標準で内蔵されるようになりました。 Python2.5以降を使う場合、パッケージの入手は必要ありません。 ただし、importするパッケージ名が変わっています。 以下の文書におけるパッケージ名「elementtree」を「xml.etree」に読み替えてください。
使い方
準備
from elementtree.ElementTree import XML, ElementTree, Element
ファイルからドキュメントオブジェクト
fd = file('test.xml', 'rb')
dom = ElementTree(file=fd)
dom.getroot()
「dom.getroot()」で、ルートエレメントにアクセス。
エレメント作成
- Elementクラスをコンストラクト(タグ名とアトリビュート辞書をパラメータ)
- テキスト領域にテキストデータをセット
- エレメントオブジェクトの子として追加
new_element = Element(u'comment',{'attr1':'1'}
new_element.text = 'text-data'
dom.getroot().append(new_element)
ドキュメントオブジェクトの保存
encode = 'utf-8'
fd = file('test.xml', 'wb')
fd.write('<?xml version="1.0" encoding="%s" ?>\n' % encode)
dom.write(fd, encode)
fd.close()
エレメントの検索
findallメソッドを使う。
パラメータにはXPathの簡略式が使えます。
「.//comment」であれば、子孫の全ての「comment」タグのエレメントを見つけてきます。
items = dom.findall('comment')
findメソッドの場合最初に見つかったエレメントだけが取得できます。
属性へのアクセス
Pythonの辞書オブジェクトのように扱える様になっているので、
print element['attr1']
で読み書きアクセス出来ます。
辞書なので、デフォルト値指定の取得も出来ます。
print element.get('attr1','default')
サンプル
- test.xml
<?xml version="1.0" encoding="utf-8" ?> <根> <段 id="A" 名前="あ行"> テキスト <群> <アイテム title="あ" /> <アイテム title="い" /> <アイテム title="う" /> <アイテム title="え" /> <アイテム title="お" /> </群> </段> </根>
- test.py
# encoding: utf-8 from xml.etree import ElementTree dom = ElementTree.parse('test.xml') print dom.findtext('//段').encode('cp932') items = dom.findall('//アイテム') for item in items: print item.attrib['title'].encode('cp932')
アウトプット:
テキスト
あ
い
う
え
お
と言うように日本語も使えます。