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