SAX 파싱 (Simple API for XML)

SAX 파싱

파싱법은 4가지가 있다. 삭스, 돔, 마샬, 언마샬.

그 중 첫번째가 SAX 파싱이다. 삭스는 한 줄씩 읽어오는 파싱이다.

 

 

x.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<rt rr=”처음”>
     <a a1=”일” a2=”이” a3=”삼”></a>
     <b b1=”하나” b2=”두울” b3=”세엣”></b>
</rt>

 

 

MainClass.java

package sax;

import java.io.File;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;

public class MainClass {
 
      public static void main(String[] args) {
  
          try{
                 SAXParserFactory spf=SAXParserFactory.newInstance(); //”삭스 파서 팩토리” 객체생성
                 SAXParser sp=spf.newSAXParser(); //”삭스 파서” 생성
                 Dhandler handler=new Dhandler(); //”D핸들러”를 new로 메모리 할당 (※디폴트 핸들러를 상속받은 핸들러임)
                 sp.parse(new File(“.\\src\\x.xml”), handler); //(1)파일 경로의 xml을 (2)핸들러 로 파싱.
          }
          catch(Exception ex){System.out.println(ex.getMessage());}
      }

}

 

Dhandler.java

package sax;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

 

public class Dhandler extends DefaultHandler {
      @Override
            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
               System.out.print(“한 줄 읽기! “);
               System.out.print(“큐네임 “+qName+” : “);

               try{
                  if(qName.equals(“rt”)){
                        System.out.print(attributes.getValue(“rr”));
                  }
   
                  if(qName.equals(“a”)){
                        System.out.print(attributes.getValue(“a1”));
                        System.out.print(attributes.getValue(“a2”));
                        System.out.print(attributes.getValue(“a3”));
                  }
    
                   if(qName.equals(“b”)){
                         System.out.print(attributes.getValue(“b1”));
                         System.out.print(attributes.getValue(“b2”));
                         System.out.print(attributes.getValue(“b3”));
                   }
                }catch(Exception ex){System.out.println(ex.getMessage());}

                System.out.println(”          !한 줄 끝”);
           }
}

 

startElement는 메소드는 Element가 하나 발견될 때마다 실행된다.

 

결과는 아래와 같이 나온다.

 

한 줄 읽기! 큐네임 rt : 처음          !한 줄 끝
한 줄 읽기! 큐네임 a : 일이삼          !한 줄 끝
한 줄 읽기! 큐네임 b : 하나두울세엣          !한 줄 끝