본문 바로가기
안드로이드

안드로이드 XML 파싱방법 - SAX, XmlPullParser, DOM

by 호군 2011. 7. 6.
반응형
링크 : http://jkproject.net/6

이용하는 xml데이터의 크기와 속도에 따라 어떤 파서를 사용할지 선택해야겠습니다.
전 XmlPullParser를 사용했었는데, SAX도 사용해봐야겠군요.
기능은 적을지 몰라도 성능이 우수하니..언제 필요할지도..모르겠습니다^^


일반적으로 Java platform에서는 세가지 정도의 XML 파서가 유명하다고 한다. Java's Simple API for XML(SAX), Documnet Object Model(DOM), Streaming API for XML(StAX) 가 그것들이다. 하지만 안드로이드에서는 마지막 StAX는 지원하지 않으며, SAX와 DOM은 완벽하게 지원하고 있다.

SAX는 상당히 빠른 속도에 메모리 사용량도 극히 작은 API로 event-driven으로 동작한다. XML 문서에서 각각의 태그를 만날때 마다 해당하는 EventListener가 떠서 파싱이 이루어진다. 특히 기존 Java 프로그램에서 사용하는 것과 동일한 형태로도 사용할 수 있으며, 안드로이드 SDK에서 지원하는 좀더 단순한 형태로 사용할 수도 있다.

DOM 역시 안드로이드에서 완벽하게 지원된다. SAX와 마찬가지로 기존 Java 프로그램에서 사용하는 것과 동일한 형태로 어떠한 변환없이 사용할 수 있다. DOM의 경우엔 XML 문서를 한꺼번에 모두 메모리로 읽어 놓고 DOM API를 이용해서 필요한 부분 어디로든지 검색할 수 있기 때문에 XML 문서의 크기가 크다면 모바일 환경에서 사용하기엔 약간 무리가 따른다. 하지만 XML 문서가 단순하다면 아주 간단하게 XML을 파싱하는 방법을 제공한다.

다음으로 안드로이드에서는 StAX와 비슷하게 동작하는 XmlPullParser를 지원한다. 속도는 SAX보다 약간 느리며 메모리 사용량은 비슷하다고 한다. 동작 역시 SAX와 비슷하긴 하지만 사용자가 직접 항목의 값을 가져오는 pull 방식을 취한다. (반대로 SAX의 경우는 push방식으로 볼수 있다.) 특히 XML문서의 모든 내용을 파싱하지 않고 필요한 부분까지 파싱한 후에 파싱을 끝낼 수 있기 때문에 XML문서에서 일부만 가져와서 작업을 해야할 경우엔 SAX보다 더 빠르고 단순하게 처리가 가능하다.

여기까지 기본적인 내용으로 보면 일반적인 안드로이드 앱에서는 SAX를 사용하는 것이 대세라고 볼수 있겠고, 사용하는 XML 문서의 특성에 따라 DOM 혹은 XmlPullParser를 사용하는 것도 괜찮다는 결론이 나온다. 하지만 국내 커뮤니티들에서는 사용하기 편리한 XmlPullParser를 많이 쓰는 것으로 보인다. 사실 SAX와 XmlPullParser 간의 성능차이는 그리 크지 않아보이기 때문에 본인한테 편한 것을 쓰는게 좋을 것 같다.

참고로 Shane Conder에 의해 쓰여진 기사를 보면 그림과 같이 안드로이드에서 SAX, XmlPullParser, DOM의 성능을 개략적으로 볼 수 있다.
Android XML Parser Performance

(from http://www.developer.com/xml/article.php/10929_3824221_2/Android-XML-Parser-Performance.htm )


마지막으로 앱에서 XML을 만들어 서버로 전송해야 할 경우엔 XmlPullParser와 같은 패키지에 들어있는 XmlSerializer를 사용하는 것이 편하다고 한다.

참고자료는 다음과 같다.
Working with XML on Android
Android XML Parser Performance
반응형