이전포스트

Simple Framework로 XML 파싱하기

freemmer 2016. 4. 22. 14:12

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




반응형