DefaultHandler Programming using SAX(Simple API for XML)


다음은 JAVA 환경에서 SAX를 이용한 XML 처리에 관한 내용입니다.

앞서 살펴본 바와 같이 네 가지 기본 핸들러의 모든 메소드를 매번 구현하는데 번거로움이 있기 때문에 네 가지 메소드가 모두 포함된 DefaultHandler를 사용한다고 말했다. 그럼 이번에는 DefaultHandler의 구현을 알아보자.

1. DefaultHandler의 구현
SAX 1.0에서 제공하는 네 가지 기본 핸들러는 org.xml.sax 패키지에 포함되어 있지만 DefaultHandler 클래스는 org.xml.sax.helpers 패키지에 포함되어 있다.

DefaultHandler는 기본 핸들러가 제공하는 모든 이벤트 메소드가 구현되어 있는 클래스이다. 그러므로 DefaultHandler를 상속(extends)받아 필요한 이벤트 메소드만 재정의(Overriding)해서 사용하면 된다.

앞서 ContentHandler나 ErrorHandler를 사용하기 위해 이벤트 핸들러를 생성한 후 XMLReader에 등록하여 사용하였다. 하지만 DefaultHandler는 XMLReader 객체를 생성할 필요 없이 SAXParser 객체에 등록해서 사용하면 된다.

SAXParser 객체는 parser() 메소드를 제공하는데, 입력 인자로 XML 문서와 DefaultHandler 객체를 갖는다.
     void parse (java.lang.String uri, DefaultHandler dh)
그러므로 DefaultHandler를 사용할 때는 SAXParser 객체 까지만 생성한 후 등록하고 사용하면 된다. 앞서 개별적인 이벤트핸들러를 사용하는 것보다 훨씬 간편해 진것을 알 수 있다.

다음은 DefaultHandler를 이용해 작성한 내용이다.
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class ImpleDefaultHandler {
     public static void main(String[] args) {
          try {
               SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
               saxParserFactory.setNamespaceAware(true);
               SAXParser saxParser = saxParserFactory.newSAXParser();
               DefaultHandler defaultHandler = new ImplHandler();
               saxParser.parse("SAXSample.xml", defaultHandler);
          } catch(Exception e) {
               e.printStackTrace(System.err);
          }
     }
}
class ImplHandler extends DefaultHandler {
     public void startDocument() {
          System.out.println("XML Document Start!!");
     }
     public void endDocument() {
          System.out.println("XML Document End!!");
     }
}


Reference : 소설같은 XML & XML Web Services
신고
Posted by Proneer

댓글을 달아 주세요


티스토리 툴바