ContentHandler Programming using SAX(Simple API for XML)


다음 내용은 JAVA를 이용한 SAX프로그래밍 내용입니다.

1. Parser 생성
ContentHandler는 SAX 1.0 에서부터 제공되던 이벤트 핸들러로써, XML 문서를 처리하기 위한 대부분의 기능이 구현되어 있는 이벤트 핸들러이다.SAX의 ContentHandler를 이용해서 프로그래밍하기 위해서는 우선 XMLReader 객체를 생성해야 한다. XMLReader 객체는 이벤트 핸들러를 등록하고 XML문서를 파싱하는 역할을 하는 객체이다.

XMLReader를 생성하기 위해서는 우선 SAXParserFactory 객체를 생성한 후 생성한 객체를 이용해 SAXParser 객체를 생성한다. SAXParser 객체는 이벤트핸들러를 등록하는 역할을 하며 XMLReader 객체를 생성한다.

XMLReader 객쳋는 DefaultHandler를 제외한 나머지 이벤트핸들러를 등록하고 XML 문서를 파싱하기 위한 API를 포함하고 있다.

위 내용을 작성하면 다음과 같다.
import javax.xml.parsers.*;
import org.xml.sax.*;
public class OthersContentHandlerEvent {
     public static void main(String[] args) {
          try {
               SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
               saxParserFactory.setNamespaceAware(true);
               SAXParser saxParser = saxParserFactory.newSAXParser();
               XMLReader xmlReader = saxParser.getXMLReader();
               ImplHandler contentHandler = new ImplHandler();   // ContentHandler 생성
               xmlReader.setContentHandler(contentHandler);     // ContentHandler 등록
               xmlReader.parse("SAXSample.xml");
          } catch(Exception e) {
               e.printStackTrace(System.err);
          }
     }
}


2. ContentHandler 구현
ContentHandler는 앞서 말한대로 XML문서를 처리하는데 필요한 대부분의 기능이 구현되어 있다. ContentHandler는 인터페이스이기 때문에 해당 클래스에 구현(implements)하고, ContentHandler에 정의되어 있는 모든 메소드를 구현해야 한다.

ContentHandler는 다음과 같은 11개의 메소드를 가지고 있다.
  • startDocument - XML 문서가 시작할 때 발생하는 이벤트
  • endDocument - XML 문서가 종료할 때 발생하는 이벤트
  • startElement() - 시작 태그에서 발생하는 이벤트
  • endElement() - 종료 태그에서 발생하는 이벤트
  • characters() - 문자 데이터 발견시 발생하는 이벤트
  • startPrefixMapping() - 네임스페이스 선언시 발생
  • endPrefixMapping() - 네임스페이스 선언 블록이 끝날 때 발생
  • ignorableWhitespace() - (DTD에 정의되어 있지 않은)공백 문자 발견시 발생
  • processingInstruction() - XML 문서의 처리 지시문 발견시 발생
  • setDocumentLocator() - 이벤트 발생 정보를 저장할 수 있는 메소드
  • skippedEntity() - XML 파서에 의해 해석되지 못하고 생략된 엔티티 발견시 발생하는 이벤트
ContentHandler를 작성하면 다음과 같다.
class ImplHandler implements ContentHandler {
     public void startDocument() { }
     public void endDocument() { }
     public void startElement(String uri, String localName, String qName, Attributes atts) { }
     public void endElement(String uri, String localName, String qName) { }
     public void characters(char[] ch, int start, int length) { }
     public void startPrefixMapping(String prefix, String uri) { }
     public void endPrefixMapping(String prefix) { }
     public void ignorableWhitespace(char[] ch, int start, int length) { }
     public void processingInstruction(String target, String data) { }
     public void setDocumentLocator(Locator locator) { }
     public void skippedEntity(String name) { }
}

이상으로 ContentHandler 구현에 관한 사항을 알아보았다. ContentHandler를 이용하면 XML 문서를 쉽게 파싱하여 원하는 대로 이용할 수 있을 것이다. ContendHandler 구현에 관한 자세한 내용은 관련 문서나 사이트를 참고하기 바란다.


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

댓글을 달아 주세요


티스토리 툴바