XML::Simpleっぽいpythonモジュール書いた

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という名前にしたかったのですが、既に使われていたので適当につけました。

あと最初に中途半端にと書きましたが、オプション対応が面倒だったので、あんまり使わなさそうなのは、ごっそり消しました。ごめんなさい。

Leave a Reply

Your email address will not be published. Required fields are marked *