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