Android (혹은 Java)에서 XML이나 json을 파싱할때 파서를 이용해 DOM/Event 방식으로 파싱하여 사용할 수 있지만,
이 경우 파싱한 데이터를 객체에 담는 과정이 추가로 발생한다.
아래의 Simple-framework와 같은 방식의 라이브러리를 사용하면 자동으로 파싱하여 객체에 넣어주기 때문에 편하게 사용할 수 있다.
이 경우는 XML의 경우 사용하는 라이브러리로 예전에 잘 사용하다 Android Studio로 넘어오면서 참고할 만한 내용이 있어 포스팅한다.
출처 : https://byunsooblog.wordpress.com/2014/06/03/simple-framework로-xml-파싱하기/
XML 파싱을 하기 위해서 Simple Framework 라이브러리를 사용해봤는데 은근 애 좀 먹었다.
일단 gradle에 추가할 때,
compile('org.simpleframework:simple-xml:2.7.+')
로 추가를 하면 첫 빌드는 성공하지만 그 다음 빌드는 실패를 한다. 찾아보니 아래 코드처럼 추가를 하면 된다.
compile('org.simpleframework:simple-xml:2.7.+'){ exclude module: 'stax' exclude module: 'stax-api' exclude module: 'xpp3' }
XML Response가 왔을 때, 파싱될 객체들만 잘 정의하면 사용하기는 편할 듯 싶은데, 그 객체를 정의하는게 좀 까다롭긴 하다.
아래는 파싱 코드
Serializer serializer = new Persister();
try {
RssType rssType = serializer.read(RssType.class, response);
Log.d(mTag, "title: " + rssType.getChannel().getItemList().get(0).getTitle());
} catch (Exception e) {
e.printStackTrace();
}
객체는 @Root, @Element, @ElementList, @Attribute를 변수에 맞게 사용해주면 된다.
@Element (name = "channel") public class ChannelType { @Element private String title; @Element private String link; @Element private String description; @Element private String lastBuildDate; @Element private String total; @Element private String start; @Element private String display; @ElementList(entry = "item", inline = true) private List itemList; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getLastBuildDate() { return lastBuildDate; } public void setLastBuildDate(String lastBuildDate) { this.lastBuildDate = lastBuildDate; } public String getTotal() { return total; } public void setTotal(String total) { this.total = total; } public String getStart() { return start; } public void setStart(String start) { this.start = start; } public String getDisplay() { return display; } public void setDisplay(String display) { this.display = display; } public List getItemList() { return itemList; } public void setItemList(List itemList) { this.itemList = itemList; } }
샘플 코드 : https://github.com/lahi/RestaurantRecommandApp
반응형
'이전포스트' 카테고리의 다른 글
Netflix Spinnaker 를 사용한 Cloud Native Continuous Delivery (0) | 2016.05.03 |
---|---|
구글 아널리틱스를 이용하여 블로그를 완벽하게 분석하는 방법 / Google Analytics (0) | 2016.05.03 |
Retrofit2 + okhttp3 + Rxandroid 사용법 (0) | 2016.04.18 |
Xcode 디버깅 새로운 기능 (0) | 2016.04.15 |
구글 인앱 결제 검증 웹 서비스 만들기 (0) | 2016.03.30 |