컴퓨터 공부/XML

[5월 22일 1교시] SAX

려리군 2009. 5. 22. 14:18

SAX

http://www.saxproject.org

Simple API for XML

특징

이벤트 처리 방식

메모리 사용이 적고 빠르다.

읽기 전용 : 순차적으로만 처리하기 때문에 뒤로 다시 돌아갈 수 없다.


기본 SAX 이벤트

startDocument : 문서의 시작에 대한 통지 메세지를 얻는다.

endDocument : 문서의 끝에 대한 통지 메세지를 얻는다.

startElement : 태그의 이름과 그 태그가 가지고 있을 수 있는 attribute를 얻는다.

endElement : element의 끝에 대한 통지 메세지를 얻는다.

characters : 파서는 character 데이터에 대한 각각의 덩어리를 보고하기 위해 이 메소드를 호출할 것이다.


추가 SAX 이벤트

ignorableWhitespace : element 안에 공백에 반응(무시)하도록 한다.

warning : XML 1.0 추천사항에 정의된 치명적인 오류나 오류가 아닌 조건에 대해 보고한다.

error : XML 문서는 valid(유효) 제약조건에 실패했을 때 적절한 오류를 발생한다.

예) element가 DTD에서 2번 정의되었다.

fatalError : 복구할 수 없는 오류 

예)well-formed 제약조건의 위반; 문서는 파서가 이 메소드를 호출 한 후에는 쓸모없어진다.


SAX2 handler 인터페이스

ContentHandler : 문서에 대한 논리적인 내용의 통지사항을 얻는다.

                         startDocument, startElement, characters등

ErrorHandler : (warning)이벤트 발생시 exception 대신 XML 처리 오류

DTDHandler : DTD기반 이벤트의 통지사항을 얻는다. 표기법과 parse되지 않는 entity 선언을 보고한다.

EntityResolver : 외부 entity를 다룬다.


SAX in JAVA

JAXP를 이용하여 XML문서를 파싱

import org.xml.sax.*;

import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParserFactory;

import javax.xml.parsers.SAXParser;


DefaultHandler class

Class : org.xml.sax.helpers.DefaultHandler;

아무 것도 정의하지 않는 메소드와 함께 4개의 핸들 인터페이스가 구현되어 있다.

프로그래머는 DefaultHandler를 상속받아 사용할 수 있다.

프로그래머는 이벤트에 대해 필요한 메소드만 재정의(override)할 수 있고 나머지는 무시할 수 있다.