Python xml2dictを使用して、xmlをdictionaryに変換する



常山日記さんの記事からてけらぼさんで記載されている
エントリにたどり着きました。

2009-01-10 [Python]巡回 16:30
[python]XMLをdictionaryに変換

xml2dictというモジュールがあるとは・・・


今までゴソゴソとPyanaや4Suite-XMLを調べていたのは、
DB2に保存したXML列のデータを表示するとき、xml+xsltで
構築すればカッコイイのでは?と思っていたからです。

サンプルも書いてみたのですが、
・xsltの記述がつらい。(自分が理解できていないだけですが。)
・pylonsを使用するつもりなので、やっぱりmakoやwebhelperが使いたい
の理由から、躊躇してました。

xmlを解析してhtmlを構成するよい方法が浮かばず
どうしたもんかと悩んでいたのですが、これを使えば
楽にmakoやwebhelperと連携できそうです。

さっそくインストール、と思ったのですが普通のpythonモジュールで
提供されてました。

#wget http://xml2dict.googlecode.com/files/xml2dict-2008.6-tar.gz


として、ダウンロードし

#tar xzvf xml2dict-2008.6-tar.gz


で解凍します。

#cd xml2dict-read-only


で移動し、中身をのぞいてみると

object_dict.py
xml2dict.py



という2つのファイルがありますので、これを適当な場所に
コピーします。

コピーしたディレクトリと同じ階層に、こんなサンプルプログラムを
書いて実行してみました。

#! /usr/bin/env python
# -*- coding:utf-8 -*-

import xml2dict

if __name__ == '__main__':
    s = """<?xml version="1.0" encoding="utf-8" ?>
    <result>
        <count n="1">10</count>
        <data><id>491691</id><name>日本語1</name></data>
        <data><id>491692</id><name>日本語2</name></data>
        <data><id>503938</id><name>hello, world</name></data>
    </result>"""

    xml = xml2dict.XML2Dict()
    r = xml.fromstring(s)
    
    #オブジェクトを触る感覚で、ノードにアクセス可能
    print '-------------------'
    print r.result.count.n
    print r.result.count.value
    print '-------------------'
    print r.result.data[0].id
    print r.result.data[0].name
    print '-------------------'
    print r.result.data[1].id
    print r.result.data[1].name
    print '-------------------'
    
    #ループも可能
    for data in r.result.data:
        print data.id, data.name



実行結果

-------------------
1
10
-------------------
491691
日本語1
-------------------
491692
日本語2
-------------------
491691 日本語1
491692 日本語2
503938 hello, world



お手軽でいい感じ。

早速、XML -> xml2dict -> makoで画面の
描画を試してみようと思います。


もどる