반응형
안녕하세요 돼지왕 왕돼지입니다.
오늘은 DOM Parser ( 돔 파서 ) 에 대해 간단히 알아보죠.
DOM 파서는 또 뭐고?
: xml 문서의 모든 내용을 메모리에 트리 형태로 펼친 후 읽는 파서이기 때문에 특정 태그 재접속 속도가 대단히 빠르고, 임의의 노드를 여러번 읽을 수 있습니다. 하지만, 전체 문서를 다 읽어서 트리를 완성한 후에야 읽기가 가능하므로, 처음 시작이 다소 느리다는 단점이 있고, 문서가 커지면 메모리를 많이 소비하는 것도 문제입니다. XML의 편집도 가능하다는 장점도 가지고 있네요.
예제 소스나 줘봐요.
<example 1>
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<order><item>Mouse</item></order>";
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8"));
Document doc = builder.parse(istream);
Element order = doc.getDocumentElement();
NodeList items = order.getElementsByTagName("item");
Node item = items.item(0);
Node text = item.getFirstChild();
String ItemName = text.getNodeValue();
}
catch (Exception e){ ; }
static DocumentBuilderFactory DocumentBuilderFactory.newInstance ()
DocumentBuilder DocumentBuilderFactory.newDocumentBuilder()
Document DocumentBuilder.parse (InputStream stream [, String systemId])
Document DocumentBuilder.parse (String uri)
Document DocumentBuilder.parse (File file)
-> XML 전체를 받아오는 것.
Element Document.getDocumentElement ()
-> XML 문서는 유일한 루트 엘리먼트를 가진다.
이 메서드가 루트 앨리먼트를 구한다. 루트를 구해야 자식들을 읽을 수 있다.
NodeList Element.getElementsByTagName (String tagname)
-> 루트 밑에 tagname을 가진 sub-parent를 구한다.
String getNodeName ()
short getNodeType ()
String getNodeValue ()
Node getFirstChild()
Node getLastChild()
Node getNextSibling ()
Node getPreviousSibling ()
Node getParentNode ()
NodeList getChildNodes ()
-> DOM은 엘리먼트 안의 문자열도 하나의 객체로 취급하기 때문에
태그 안의 문자열을 읽으려면 getFirstChild -> getNodeValue로 값을 읽어야 한다.
NamedNodeMap Node.getAttributes ()
-> 엘리먼트의 속성을 읽을 때, attribute 하나하나도 다 node로 매핑
<example 2>
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<order>" +
"<item Maker=\"Samsung\" Price=\"23000\">Mouse</item>"+
"<item Maker=\"LG\" Price=\"12000\">KeyBoard</item>" +
"<item Price\"156000\" Maker=\"Western Digital\">HDD</item"+"</order>";
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8"));
Document doc = builder.parse(istream);
Element order = doc.getDocumentElement();
NodeList items = order.getElementsByTagName("item");
String result = "";
for (int i = 0; i < items.getLength; i++){
Node item = items.item(i);
Node text = item.getFirstChild();
String ItemName = text.getNodeValue();
Result += ItemName + " : ";
NamedNodeMap Attrs = item.getAttributes();
for (int j = 0; j < Attrs.getLength(); j++){
Node attr = Attrs.item(j);
Result += (attr.getNodeName() + " = " + attr.getNodeValues() + " ");
}
Reulst += "\n";
}
}
catch (Exception e){ ; }
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] Async Download. (0) | 2012.02.18 |
---|---|
[Android/안드로이드] web, internet에서 image 읽어오는 방법 + Cache. ( download, load ) (0) | 2012.02.18 |
[Android/안드로이드] SAX Parser ( 삭스 파서 ) (6) | 2012.02.18 |
[Android/안드로이드] XmlPullParser 에 대해 알아봅시다. (2) | 2012.02.18 |
[Android/안드로이드] JSON Parser ( 제이슨 파서 ) (6) | 2012.02.18 |
댓글