2009/04/30

Groovy+Xml(その2:XmlSlurperで検索)

XmlSlurperの勉強がてら、なにかつくってみる。

以下のサイトに郵便番号データをxmlで公開されていたので利用させていただいた。

全国郵便番号XMLデータ | イイ!! プログラミング Blog

ダウンロードしたファイルを展開し、デスクトップに置き、以下のプログラムを実行。コマンドラインから第一引数に郵便番号7桁を入力すると住所が表示される。(入力値のチェックをはしょってますごめんなさい)

#!/usr/bin/env groovy
import static java.lang.System.*

assert args[0] && args[0] ==~ /\d+/

final USER_HOME = new File(getProperty("user.home"))
final DESKTOP = new File("${USER_HOME}/デスクトップ")
def data = new XmlSlurper().parse(new File("${DESKTOP}/jp_zipcode.xml"))

def prefecture = data.Prefecture.find{ it.City.Area.ZipCode.text().contains(args[0]) }
def city = prefecture.City.find{ it.Area.ZipCode.text().contains(args[0]) }
def area = city.Area.find{ it.ZipCode.text() == args[0] }

println area.ZipCode
println prefecture.PrefectureName
println city.CityName
println "${area.AreaName}(${area.AreaKana})"

同じような記述が複数あるのがちょっと嫌。

本当はareaを最初に検索して、残りのcityprefectureparent()または.".."を使用して参照したかったのだが、これを利用すると同一の親要素がすべて取得されてしまうのでやむなく同じような記述を。

もうちょっとスマートにかければいいんだけど。

0 件のコメント:

コメントを投稿