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 メモの目次
勉強した内容をメモとして残します.
インストール
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 メモの目次