Yahooの形態素解析APIを使おうと思ったら、XML形式しか対応してなかったので、Perlで言うところのXML::Simpleなpythonモジュールを探したのですが見つかりませんでした。XML::SimpleはXMLとPerlのハッシュ(と配列の混合オブジェクト)を相互に変換するモジュールで、ちょっとしたXMLの処理をするには非常に便利なので残念です。普通にDOMを弄っても良かったのですが、Python クックブックにベースとなるコードを見つけた事もあり、勢いでXML::Simpleを(中途半端に)移植してみました。
モジュール名はpyxml2objでXML::Simpleと同様にXMLinとXMLoutを実装してあります。このモジュールを使うと以下の様な感じで、XMLとpyhtonの辞書(とリストの混合オブジェクト)を相互変換できます。
from pyxml2obj import XMLin, XMLout
xml = """
10.0.0.101
10.0.1.101
10.0.0.102
10.0.0.103
10.0.1.103
"""
obj = XMLin(xml) # xml to object
print obj
# 以下出力を整形
# {u'debugfile': u'/tmp/foo.debug', u'logdir': u'/var/log/foo/',
# u'server': {
# u'gobi': {u'osversion': u'6.5', u'address': u'10.0.0.102', u'osname': u'irix'},
# u'kalahari': {u'osversion': u'2.0.34', u'address': [u'10.0.0.103', u'10.0.1.103'], u'osname': u'linux'},
# u'sahara': {u'osversion': u'2.6', u'address': [u'10.0.0.101', u'10.0.1.101'], u'osname': u'solaris'}}}
dic = { 'country' : {
'England' : { 'capital' : 'London' },
'France' : { 'capital' : 'Paris' },
'Turkey' : { 'capital' : 'Istanbul' },
}}
print XMLout(dic) # object to xml
# 以下出力そのまま
#
#
#
#
#
内部ではxml.saxモジュールを使ってXMLのパースを行っています。これで非常に簡単にXMLを扱えるようになりましたね。最初は半日くらいで出来るかと思ったのですが、テスト等で手間取って結局丸まる3日かかりまして、壮大なヤクの毛刈りになってしまいました。。
なお今回も調子に乗ってpypiに登録したのでインストールはeasy_installから。ソースはgithubから。
$ easy_install pyxml2obj
本当はpyxmlsimpleという名前にしたかったのですが、既に使われていたので適当につけました。
あと最初に中途半端にと書きましたが、オプション対応が面倒だったので、あんまり使わなさそうなのは、ごっそり消しました。ごめんなさい。