본문 바로가기
Development/Android

[안드로이드][Xml] Xml 파싱 DOM

by 푸민 2015. 9. 29.
반응형


안녕하세요 푸민입니다.


저번 시간에 이어 Xml 파싱의 다른 방식에 대해서 알아보겠습니다.

이번에 알아볼 방법은 DOM 방식인데요. 우리가 아주 잘아는 트리구조로 문서를 변환해서 읽어오는 것입니다. DOM은 SAX에 비해 다 좋은데 하나 안좋은점이 있는것이 처음에 문저 전체를 변환하기 때문에 처음 변환할때 시간이 오래 걸립니다. 


고로 아주 짧은 Xml 문서를 파싱하여 사용한다면 SAX 방식이 좋을 것이고, 조금이라도 큰 Xml 문서를 사용한다면 DOM 방식이 훨씬 좋습니다! 그리고 SAX는 각 이벤트를 하나씩 처리하는 반면에 DOM은 한번 변환하면 바로바로 사용할 수 있습니다.


안드로이드에서 DOM 파서 사용법을 한번 볼까요?


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse(file);


먼저 빌드팩토리를 만들고 팩토리를 만듭니다. 그리고나서 팩토리를 이용해 Xml 문서를 파싱합니다. DocumentBuilder 의 parse()File 이 올 수 있고, Uri, InputStream 도 올 수 있습니다. 이렇게 Document 를 만들게 되면 필요한 엘리먼트를 검색해서 사용하면 됩니다.


doc.getDocumentElement().normalize();


normalize() 를 호출하면 Document 의 구조가 안정화됩니다.


NodeList nodeList = doc.getElementsByTagName("start");


NodeList 를 만들어 start (예를 든거에용. 필요한 엘리먼트를 찾아서 쓰시면 됩니다.) 라는 이름이 들어간 모든 엘리먼트를 리스트로 받습니다.


int count = nodeList.getLength();

for(int i = 0 ; i < count ; i++){

Node node = nodeList.item(i);

value = node.getChildNodes().item(1).getFirstChild().getNodeValue();

}


검색하여 결과 리스트만큼 for 문을 돌면서 각 값을 들고옵니다. 해당 노드에서 차일드 노드를 들고온 뒤 아이템을 꺼내서 처음 값을 꺼냅니다. 이렇게 사용하면 되고, Exception 이 뜰 수 있기 때문에 try 문으로 묶어줍니다.

반응형

댓글