본문 바로가기

안드로이드

데이터 파싱 ?

1. Parsing

parsing은 구문 분석이라고 합니다. 문장이 이루고 있는 구성 성분을 분해하고 분해된 성분의 위계 관계를 분석하여 구조를 결정하는 것입니다. 즉 데이터를 분해 분석하여 원하는 형태로 조립하고 다시 빼내는 프로그램을 말합니다. 웹상에서 주어진 정보를 내가 원하는 형태로 가공하여 서버에서 불러들이는 것입니다.

 

이러한 parsing 기법은 XML parsing JSON parsing이 있습니다.

 

2. Parser

Parser Compiler의 일부로서 원시 프로그램의 명령문이나 온라인 명령문, HTML 문서 등에서 Markup Tag 등을 입력으로 받아들여서 구분을 해석 할 수 있는 단위로 여러 부분으로 해석해 w는 역할을 한다.  Compiler Interpreter에서 원시 프로그램을 읽어 들여, 그 문장이 구조를 알아내는 Parsing을 행하여 주는 프로그램이다.

 



출처: https://kingpodo.tistory.com/8 [킹포도의 코딩]

 

■ DOM 방식과 SAX 방식

 

DOM 방식과 SAX 방식의 가장 큰 차이는 문서에 접근하는 방식이다. DOM 방식은 문서 전체를 메모리에 로드하여 원하는 노드에 바로 접근하여 추가 및 수정할 수 있는데, SAX 방식은 문서의 일부분만 메모리에 올려 처음에서 끝까지 순차적으로 처리하기 때문에 읽는 기능으로만 처리할 수 있다.

 

                     항목                             DOM(Document Object Model)                SAX(Simple API for XML)

파서의 동작 결과물로 트리 구조의 객체(Object) 리턴.
파싱 시작 후 완료될 때까지 대기.
DOM 객체(Object)에서 원하는 요소 탐색.
XML 문서를 단-방향 스트림으로 처리.
파싱 중 유효한 요소가 식별되면 이벤트로 전달.
식별된 요소에서 필요한 값을 개발자가 직접 저장.
파서의 장점 XML 노드 탐색, 추가, 수정, 삭제 작업이 용이함.
XML 문서의 생성이 편함.
동작 방식이 간단.
선별적 요소 식별 시 속도가 빠름.
파서(Parser)가 사용하는 메모리가 적음.
파서의 단점 많은 양의 메모리 사용.
단순 요소 값 식별 시 속도 느림.
XML 노드 탐색, 추가, 수정, 삭제 작업이 쉽지 않음.
XML 문서의 생성은 개발자의 몫.
파서의 사용 XML 문서 탐색이 빈번하게 발생하는 경우.
XML 문서 구조가 자주 변경되는 경우.
XML 문서의 구조가 아닌 요소의 값이 중요한 경우.
XML 문서의 구조가 간단하거나 동일한 요소가 반복되는 경우.

 

출처: https://kingpodo.tistory.com/8 [킹포도의 코딩]  

 

[DOM(Document Object Model) Parser]

특징 : Element를 모두 Tree 구조로 메모리에 넣어 두고 사용
장점 : 메모리에 Tree구조로 정보가 들어있기 때문에 한번 파싱해 두면
       아무때나 얻고 싶은 Element에 대한 정보를 얻을 수 있다.
단점 : 메모리의 소모가 다른 방법보다 많음


[SAX(Simple API for XML) Parser]

특징 : 이벤트 기반의 파서로 문서의 시작과 끝, Element의 시작과 끝, Element의 내용 등
       Element Tag의 이름에 따라 각각을 처리하는 메소드를 두어 파싱함
장점 : 라인by라인으로 파싱하기 때문에 파싱하는데 일정한(적은) 메모리만 소요
단점 : 파싱시 그냥 지나갔던 Element의 정보를 얻고 싶으면 다시 파싱해야함.


[Pull Parser]

특징 : SAX와 같이 이벤트 기반의 파서이지만, SAX와 달리 문서에 대한 모든 파싱을 하지 않고도
       특정 부분까지의 파싱내용을 활용할 수 있음.(parser.next()를 해줘야 함)
장점 : 원하는 부분까지만 파싱할 수 있는 장점.
단점 : SAX의 단점 + SAX보다 약간느림.

 

 

안드로이드 XML 파서 

참고자료 : https://recipes4dev.tistory.com/134