日本郵政の郵便番号データをXML形式に変換したものを用意する機会があったので、公開してみます。
文字コードはUTF-8です。
フォーマットは以下のような形式になっています。
<?xml version="1.0"?>
<JapanAreaData>
<Prefecture>
<PrefectureKana>ホッカイドウ</PrefectureKana>
<PrefectureName>北海道</PrefectureName>
<City>
<CityName>札幌市中央区</CityName>
<CityNameKana>サッポロシチュウオウク</CityNameKana>
<Area>
<AreaKana>アサヒガオカ</AreaKana>
<AreaName>旭ケ丘</AreaName>
<ZipCode>0640941</ZipCode>
</Area>
<Area>
<AreaKana>オオドオリヒガシ</AreaKana>
<AreaName>大通東</AreaName>
<ZipCode>0600041</ZipCode>
</Area>
:
</City>
<City>
<CityName>札幌市北区</CityName>
<CityNameKana>サッポロシキタク</CityNameKana>
:
</City>
</Prefecture>
<Prefecture>
<PrefectureKana>アオモリケン</PrefectureKana>
<PrefectureName>青森県</PrefectureName>
:
</Prefecture>
</JapanAreaData>
<JapanAreaData>
<Prefecture>
<PrefectureKana>ホッカイドウ</PrefectureKana>
<PrefectureName>北海道</PrefectureName>
<City>
<CityName>札幌市中央区</CityName>
<CityNameKana>サッポロシチュウオウク</CityNameKana>
<Area>
<AreaKana>アサヒガオカ</AreaKana>
<AreaName>旭ケ丘</AreaName>
<ZipCode>0640941</ZipCode>
</Area>
<Area>
<AreaKana>オオドオリヒガシ</AreaKana>
<AreaName>大通東</AreaName>
<ZipCode>0600041</ZipCode>
</Area>
:
</City>
<City>
<CityName>札幌市北区</CityName>
<CityNameKana>サッポロシキタク</CityNameKana>
:
</City>
</Prefecture>
<Prefecture>
<PrefectureKana>アオモリケン</PrefectureKana>
<PrefectureName>青森県</PrefectureName>
:
</Prefecture>
</JapanAreaData>
元データは日本郵政のサイトにおいてある、CSVファイルです。Perlで書いた変換スクリプトでXMLに変換しました。
郵便番号CSVデータをXMLに変換するスクリプト
#!/usr/bin/perl
use strict;
use XML::Simple;
my $hash;
my %tmp_hash;
my $i;
$hash->{'Prefecture'} = [];
my $current_pref;
my $current_city;
my $pref_prefix = -1;
my $city_prefix = -1;
while (<>) {
chomp;
s/"//g;
my ($idnum, $zip5, $zip7, $pref_kana, $city_kana, $area_kana, $pref, $city, $area) = split(/,/);
if ($area eq '以下に掲載がない場合') {
next;
}
if ($current_pref ne $pref) {
$pref_prefix++;
$city_prefix = -1;
$current_pref = $pref;
$current_city = "";
push(@{$hash->{'Prefecture'}}, { 'PrefectureName' => $pref, 'PrefectureKana' => $pref_kana, 'City' => [] });
}
if ($current_city ne $city) {
$city_prefix++;
$current_city = $city;
push(@{$hash->{'Prefecture'}[$pref_prefix]->{'City'}}, { 'CityName' => $city, 'CityNameKana' => $city_kana, 'Area' => [] });
}
push(@{$hash->{'Prefecture'}[$pref_prefix]->{'City'}[$city_prefix]->{'Area'}}, { 'ZipCode' => $zip7, 'AreaName' => $area, 'AreaKana' => $area_kana });
}
print XMLout($hash, NoAttr => 1, RootName => 'JapanAreaData');
タグ: XML
