先日,pyRXP という高速 XML パーサーについて少し触れた(ブログエントリ).
ずいぶん時間がたったがちょっと使って検討してみることにした.
☆インストール
21:44.amarone[12055]cd pyRXP-1.13
21:46.amarone[12056]python setup.py build
running build
running build_ext
building 'pyRXP' extension
creating build/temp.macosx-10.5-i386-2.5
...
21:46.amarone[12057]sudo python setup.py install
Password:
running install
running build
running build_ext
running install_lib
copying build/lib.macosx-10.5-i386-2.5/pyRXP.so -> /Library/Python/2.5/site-packages
copying build/lib.macosx-10.5-i386-2.5/pyRXPU.so -> /Library/Python/2.5/site-packages
running install_egg_info
Writing /Library/Python/2.5/site-packages/pyRXP-1.13-py2.5.egg-info
☆使ってみる
21:50.amarone[12063]python
Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyRXP
>>> p=pyRXP.Parser()
XML をパースする.
>>> p.parse('<tag id="1"><a>hello</a><b>world</b></tag>')
('tag', {'id': '1'}, [('a', None, ['hello'], None), ('b', None, ['world'], None)], None)
このようにXML構造がタプルに変換される.
1つのタプルは4つの要素からなる.
(tagName, dict_of_attributes, list_of_children, spare)
しかし,このままではおもしろいけれど,ちょっと使いにくい.
ダウンロードしたアーカイブを展開したディレクトリの examples ディレクトリに xmlutils.py というファイルがある.
これを使うと,上記タプル化された XML の使い道が少しでてくる.
>>> tree = p.parse('<tag id="1"><a>hello</a><b>world</b></tag>')
と代入しておいて,
>>> import sys
>>> sys.path.append('examples')
>>> import xmlutils
>>> tw = xmlutils.TagWrapper(tree)
とする.
この tw というオブジェクトを使うことになる.
>>> tw
TagWrapper<tag>
>>> tw.keys()
['id', 'a', 'b']
>>> tw._children
[('a', None, ['hello'], None), ('b', None, ['world'], None)]
>>> tw.a._children
['hello']
>>> tw.id
'1'
>>> tw.b.__str__()
'world'
という具合である.
まだまだ改良の余地はあるが,少し使えそうか.
この examples/xmlutils.py もシンプルなので拡張しやすい.
おもしろそうではある.
うまくすれば,XPath のような使い方ができそうだ.
さらなる検討が必要.
<参考外部リンク>
・配布元:ReportLab
・XMLの論考: RXPパーサ
pyRXP信関連メモの目次
ずいぶん時間がたったがちょっと使って検討してみることにした.
☆インストール
21:44.amarone[12055]cd pyRXP-1.13
21:46.amarone[12056]python setup.py build
running build
running build_ext
building 'pyRXP' extension
creating build/temp.macosx-10.5-i386-2.5
...
21:46.amarone[12057]sudo python setup.py install
Password:
running install
running build
running build_ext
running install_lib
copying build/lib.macosx-10.5-i386-2.5/pyRXP.so -> /Library/Python/2.5/site-packages
copying build/lib.macosx-10.5-i386-2.5/pyRXPU.so -> /Library/Python/2.5/site-packages
running install_egg_info
Writing /Library/Python/2.5/site-packages/pyRXP-1.13-py2.5.egg-info
☆使ってみる
21:50.amarone[12063]python
Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyRXP
>>> p=pyRXP.Parser()
XML をパースする.
>>> p.parse('<tag id="1"><a>hello</a><b>world</b></tag>')
('tag', {'id': '1'}, [('a', None, ['hello'], None), ('b', None, ['world'], None)], None)
このようにXML構造がタプルに変換される.
1つのタプルは4つの要素からなる.
(tagName, dict_of_attributes, list_of_children, spare)
しかし,このままではおもしろいけれど,ちょっと使いにくい.
ダウンロードしたアーカイブを展開したディレクトリの examples ディレクトリに xmlutils.py というファイルがある.
これを使うと,上記タプル化された XML の使い道が少しでてくる.
>>> tree = p.parse('<tag id="1"><a>hello</a><b>world</b></tag>')
と代入しておいて,
>>> import sys
>>> sys.path.append('examples')
>>> import xmlutils
>>> tw = xmlutils.TagWrapper(tree)
とする.
この tw というオブジェクトを使うことになる.
>>> tw
TagWrapper<tag>
>>> tw.keys()
['id', 'a', 'b']
>>> tw._children
[('a', None, ['hello'], None), ('b', None, ['world'], None)]
>>> tw.a._children
['hello']
>>> tw.id
'1'
>>> tw.b.__str__()
'world'
という具合である.
まだまだ改良の余地はあるが,少し使えそうか.
この examples/xmlutils.py もシンプルなので拡張しやすい.
おもしろそうではある.
うまくすれば,XPath のような使い方ができそうだ.
さらなる検討が必要.
<参考外部リンク>
・配布元:ReportLab
・XMLの論考: RXPパーサ
pyRXP信関連メモの目次