DOM 파싱 (Document Object Model)

DOM 파싱

 

DOM 파싱은 xml을 전부 읽어서 메모리에 올려두는 방식이다. 한 줄씩 읽는 SAX파싱과 다르게 수정/삭제가 가능하다.

 

company.xml

<?xml version=”1.0″ encoding=”EUC-KR”?>
<company>  <!–company 엘리먼트. 최상위 태그. ‘루트’ 라고 부른다.–>
      <product> <!–product 엘리먼트–>
            <no>1</no>               <!– no 엘리먼트    –>
            <name>비누</name>  <!– name 엘리먼트  –>
            <price>2000</price>   <!– price 엘리먼트 –>
      </product>

 

      <product>
            <no>2</no>
            <name>샴푸</name>
            <price>5000</price>
           </product>
 
      <product>
            <no>3</no>
            <name>폼클렌징</name>
            <price>4000</price>
      </product> 
</company>

 

 

package dom;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

 

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

 

public class MainClass {

 

    public static void main(String[] args) {

 

    Document doc//도큐먼트 선언. xml 문서 전범위를 도큐먼트라고 한다.

    Element root;  //루트 선언. <>로 묶인 것을 ‘엘리먼트’라고 하는데 가장 최상위 태그를 ‘루트’ 라고 한다.

    String i1,i2,i3;

 

    try{

        //1. xml문서를 doc변수에 전부 기억시킴

        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); //”도큐먼트 빌더 팩토리”생성

        DocumentBuilder db=dbf.newDocumentBuilder();//”도큐먼트 빌더”생성 

        doc=db.parse(new File(src\\company.xml”)); //도큐먼트 빌더로 xml파싱(다 읽었음.)

        root=doc.getDocumentElement(); //도큐먼트의 첫번째 엘리먼트를 가져와서 root로 설정

 

        //2. 출력하기

​             NodeList node//노드리스트 선언

        //node=root.getElementsByTagName(product”);

        node=root. getElementsByTagName(“no”); // no엘리먼트를 가져와서 노드리스트로 만들기

        i1=node.item(2).getFirstChild().getNodeValue(); //2번째 아이템 가져오기

                                                                                                       //cf) 0번째: 1, 1번째: 2, 3번째: 3

 

        node=root. getElementsByTagName(name”); //name엘리먼트를 가져와서 노드리스트로 만들기 

        i2=node.item(2).getFirstChild().getNodeValue(); //2번째 아이템 가져오기

                                                                                                    //cf) 0번째: 비누, 1번째: 샴푸, 3번째: 폼클렌징

        node=root. getElementsByTagName(value”); //value엘리먼트 가져오기 

        i3=node.item(2).getFirstChild().getNodeValue(); //cf) 0번째: 2000, 1번째: 5000, 3번째: 4000

        System.out.println(i1+“===”+i2+“===”+i3); //3===폼클렌징===4000

        }catch(Exception ex){System.out.println(ex.getMessage());}

    }

}