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 を最初に検索して、残りの city 、 prefecture は parent() または .".." を使用して参照したかったのですが、 これを利用すると同一の親要素がすべて取得されてしまう のでやむなく同じような記述をのこしました。
もうちょっとスマートにかければいいのですが。
ディスカッション
コメント一覧
まだ、コメントがありません