티스토리 뷰

 

 

안녕하세요 카산드라입니다

 

일전에 우편번호 공공데이터를 xml로 받아보는 작업을 포스팅했는데

 

오늘은 그 받아온 xml데이터들을 파싱하여 데이터를 가공하는 작업을 포스팅 하려합니다

 

 

 

 

2015/11/11 - [IT/DB] - 공공데이터(OPEN API)로 5자리우편번호 제공받기!초간단!

 

 

우선 먼저 공공데이터를 xml로 받아오는 작업이 궁금하시면 위에 링크 연결해뒀습니다~!

 

 

 

그렇게 받아오면 이런식으로 데이터를 받아오게됩니다~!

 

이제 이 데이터를 파싱을 해주면 되는데요

 

저가 이번에 받아온 데이터는 요즘 새로 개정된 5자리우편번호 데이터입니다

 

보통은 회원가입이나 아니면 쇼핑몰같은 경우 배송지를 선택할때

 

주소입력폼을 구현할때 많이 사용하는데요

 

계속되는 주소체계변경으로 DB에 직접넣는것보다 이렇게

 

제공받아 직접 가공할 수있는 공공데이터에서 제공받는 API를 사용하기로 했습니다

 

 

 

xml을 파싱하는 방법은 여러방법이 있습니다

 

저는 이중 JDOM2를 이용한 파싱을 하려고 합니다

 

JDOM2는 엘리멘트 선택시 직관적이라 쉽게 이해하고 사용하기 편리합니다

 

우선 JDOM2를 사용하려면 라이브러리를 다운받아야 하는데요

 

http://www.jdom.org

 

위 링크에서 jdom2라이브러리를 제공해줍니다

 

사이트 접속후 Source 클릭!

 

each JDOM release 클릭!

 

jdom-2.0.6.zip 을 다운받습니다!

 

 

다운받은 파일의 압축을 풀면 여러가지 파일이 있는데

 

그중 jdom-2.0.6.jar 파일만 해당프로젝트에

 

넣어둡니다

 

저 같은경우는

 

/WEB-INF/lib 경로에 넣어뒀습니다.

 

잘 넣어두고 인식까지 되었다면

 

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

 

프로젝트에서 위 세가지를 임포트를 받을 수 있을것입니다

 

 

소스를 보시면 위와 같습니다

 

1 데이터를 담을 벡터컬렉션 생성

2 파싱을 위한 SAXBuilder 객체 생성

3 xml을 파싱할때 공백은 무시

4 우선 xml을 url을 통해 받아서 Document객체에 담음

5 xml데이터에서 루트엘리먼트(최상위엘리먼트)를 가져옴

(여기서는 NewAddressListResponse를 가져오겠죠?)

6 루트엘리먼트의 바로 아래 자식중 cmmMsgHeader의 이름을 가진 엘리먼트를 가져옴

7 루트엘리먼트의 바로 아래 자식중 newAddressListAreaCdSearchAll의 이름을 가진 엘리먼트를 가져옴

8 벡터에 cmmMsgHeader들 중 첫번째를 가져와 백터에 담음 (실제로도 하나밖에 없음) 

9 백터에 newAddressListAreaCdSearchAll들을 모두 순서대로 백터에 담음

 

 

이렇게 하면 파싱된 데이터를 가져올 수있습니다

 

그리고 이제 이 데이터중 세부적으로 더 접근해서 데이터를 뽑아서

 

뿌려주면 끝입니다.

 

 

오늘 포스팅은 여기까지 하고요

다음글에 이 데이터들을 어떻게 뿌리는지

포스팅하겠습니다