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

2022-10-16Groovy

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() または .".." を使用して参照したかったのですが、 これを利用すると同一の親要素がすべて取得されてしまう のでやむなく同じような記述をのこしました。

もうちょっとスマートにかければいいのですが。

2022-10-16Groovy