libxml2 の python バインディングに関する情報が少ないので,
勉強した内容をメモとして残します.

インストール
libxml2-2.7.6.tar.gz を http://xmlsoft.org/sources/ からダウンロード

$tar zxvf libxml2-2.7.6.tar.gz
$cd libxml2-2.7.6
$./configure --with-python --prefix=/opt
$make
$sudo make install

これで python バインディングモジュールもインストールされる.
Mac OSX の場合 /Library/Python/2.5/site-packages にインストールされる.


Python スクリプト内での使用方法

# ライブラリのロード
import libxml2

# XML ドキュメント名のセット
filename="model.xml"

# XMLファイルを開く
doc = libxml2.parseFile(filename)

# コンテクストを作成する
ctx=doc.xpathNewContext()

# NameSpace を設定する
ctx.xpathRegisterNs('is','http://www.physiome.jp/ns/insilicoml')

# XPath を評価する
nodes=ctx.xpathEvalExpression("//is:insilico-model/is:header/is:model-name")

# XPath で取得したノードの内容をとる
nodes[0].getContent()

# Attribute を取得するのも同様.Attribute には @ をつける.
# XPath の中にノードを特定する条件を [ ] を使って埋め込むことも可能
nodes=ctx.xpathEvalExpression('//is:insilico-model/is:module-set/is:module[@module-id="fbc22ea7-ddb0-45ca-ae99-57da41dd749a"]/@type')

nodes[0].getContent()

# あるノード以下の XML をそのまま取得するには
nodes = ctx.xpathEvalExpression('//is:insilico-model/is:module-set/is:module[@module-id="fbc22ea7-ddb0-45ca-ae99-57da41dd749a"]')

xmlstr = str(nodes[0])


# ノードのタグ名を取得する
nodes[0].get_name()

# ノードの name space の prefix を取得する
nodes[0].ns().get_name()

# ノードの name space の定義を取得する
nodes[0].ns().getContent()



やじるし libxml2 + Python メモの目次