안드로이드 개발 질문/답변
(글 수 45,052)
import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.HashMap; import javax.xml.parsers.*; import org.w3c.dom.*; import android.util.Log; HashMap <String,String> hmTmpData = new HashMap<String,String>(); StringBuilder html = new StringBuilder(); html.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \n"); html.append("<wid> \n"); html.append(" <header> \n"); html.append(" <tm>201102101400</tm> \n"); html.append(" <ts>4</ts> \n"); html.append(" <x>102</x> \n"); html.append(" <y>84</y> \n"); html.append(" </header> \n"); html.append(" <body> \n"); html.append(" <data seq=\"0\"> \n"); html.append(" <hour>18</hour> \n"); html.append(" <day>0</day> \n"); html.append(" <temp>4.0</temp> \n"); html.append(" <tmx>-999.0</tmx> \n"); html.append(" <tmn>-999.0</tmn> \n"); html.append(" <sky>4</sky> \n"); html.append(" <pty>2</pty> \n"); html.append(" <wfKor>눈/비</wfKor> \n"); html.append(" <wfEn>Snow/Rain</wfEn> \n"); html.append(" <pop>60</pop> \n"); html.append(" <r12>1.0</r12> \n"); html.append(" <s12>0.5</s12> \n"); html.append(" <ws>2.0</ws> \n"); html.append(" <wd>0</wd> \n"); html.append(" <wdKor>북</wdKor> \n"); html.append(" <wdEn>N</wdEn> \n"); html.append(" <reh>65</reh> \n"); html.append(" </data> \n"); html.append(" </body> \n"); html.append("</wid> \n"); String xmlcontents = html.toString(); try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputStream istream = new ByteArrayInputStream(xmlcontents.getBytes("utf-8")); Document doc = builder.parse(istream); Element wid = doc.getDocumentElement(); // #text 제거 ---------------------------------------------------------- 1 NodeList textItems = wid.getElementsByTagName("#text"); for(int i =0;i<textItems.getLength();i++){ wid.removeChild(textItems.item(i)); }
NodeList bodyItems = wid.getElementsByTagName("body"); Document bodyDoc = bodyItems.item(0).getOwnerDocument(); Element bodye = bodyDoc.getDocumentElement(); NodeList datas = bodye.getElementsByTagName("data"); NodeList dataitems = datas.item(0).getChildNodes();//-------------------------- 2 String NodeName = ""; String NodeValue = "";
//로그에 찍어본다.---------------------------------------------------------- 3 for(int i =0;i<dataitems.getLength();i++){ try { Log.i("Test", "(bodyitems.item(i)).getNodeName() : "+(dataitems.item(i)).getNodeName() ); NodeName = (dataitems.item(i)).getNodeName(); NodeValue = ((dataitems.item(i)).getFirstChild()).getNodeValue(); // 노드명이 #text 일때는 여기서 에러발생 hmTmpData.put(NodeName, NodeValue); Log.i("Test", "(bodyitems.item(i)).getFirstChild().getNodeValue() : "+((dataitems.item(i)).getFirstChild()).getNodeValue() ); } catch (Exception e) { // TODO: handle exception } } } catch (Exception e) { // TODO: handle exception }
기상청 날씨정보를 full파서로 파싱해 보았습니다.
그런데, 2에서 처럼 NodeList 를 얻어 와서 3에서 처럼 로그를 뿌려보면..
존재하지도 않았던.. #text 라는 노드가 각 노드들 앞에 삽입되 있는 것을 볼 수 있는데요..
문제는 이 노드가 value 값을 갖지 않아서 인지 에러가 발생합니다. 그래서,
1에서와 같이 # text 노드 들을 삭제해 보려 했으나.. 제거가 않되고 여전히 남아 있네요..
하여, # text 이놈을 삭제 할 수 있는 방법이 알고 싶습니다.
또는 제가 위와 같은 처리에 있어서 #text에 대해 잘못 이해 하는 부분이 있다면 알려주시면 감사하겠습니다.
s/w 엔지니어, 개발자 천국을 지향합니다.