XML 문서 내용 중 엘리먼트, 문자 데이터, 프로세싱 지시자를 만나면 그 이벤트를 ContentHandler 인터페이스를 구현하는 이벤트 핸들러 객체에게 전달한다.
DTD 내용 중에 노테이션 선언과 외부 언파스드 엔티티 선언을 만나면 그 이벤트를 DTDHandler 인터페이스를 구현하는 이벤트 핸들러 객체에게 전달한다.
DTD 나 XML 문서 내용 중에서 외부 파스드 엔티티에 대한 참조를 만나면 그 이벤트를 EntityResolver 인터페이스를 구현하는 이벤트 핸들러 객체에게 전달한다.
XML 문서 파싱 중에 파싱 에러가 발생하면 그 이벤트를 ErrorHandler 인터페이스를 구현하는 이벤트 핸들러 객체에게 전달한다.
- 이벤트가 발생했을 때 처리하는 내용을 DTDHandler, ContentHandler, EntityResolver, ErrorHandler 인터페이스를 구현하는 클래스에 작성해 두어야 한다.
- 이벤트 핸들러의 구현 객체는 SAX 파서의 parse() 메소드를 호출하기전에 XMLReader 인터페이스의 메소드를 이용하여 SAX 파서에 등록해 두어야 한다.
SAX 파서는 등록된 이벤트 핸들러 객체에게만 이벤트를 전달한다.
- SAX 파서 객체 생성 : 파서공장생성, 파서생성
- SAX 파서에 기능 추가
- ContentHandler의 이벤트 처리(ContentHandler를 구현한 클래스)
startElement()
stopElement
namespaceURL / localName / qName / atts(start만)
character
ch
start
Length
- DTDHandler의 이벤트 처리(DTDHandler를 구현한 클래스)
- EntityResolver의 이벤트 처리(implements EntityResolver)
publicId
systemId
InputSource
- ErrorHandler의 이벤트 처리(implements ErrorHandler)
fatalError() : XML문서가 Well-formed하게 작성되지 않은 경우(권고안을 지키지 않았을경도) 발생하는 이벤트를 처리하는 메소드
error() : XML문서가 유효한 문서가 아닐 경우(DTD, XML Schema 정의 구조 x)에 발생하는 이벤트를 처리하는 메소드
warning() : fatalError 및 error 이외의 이벤트를 처리하는 메소드
- DefaultHandler의 이벤트 처리(extends DefaultHandler)
위 4개의 핸들러는 메소드를 모두 구현해야 한다.(abstract class를 implements하기때문)
하지만 DefaultHandler는 상속받아서 구현하기 때문에, override할 메소드만 구현하면 된다.
'General > Java' 카테고리의 다른 글
[JAVA] 스트링 한글 바이트 계산, EUC-KR (0) | 2011.03.30 |
---|---|
객체지향의 개념 (0) | 2010.12.15 |
[자바 프로그래밍] 자바 프로그래밍 기초 (0) | 2010.10.22 |
[Java언어] 숨겨진 숫자 맞추는 프로그램 (0) | 2010.09.22 |
[Java언어] 운동에너지 구하는 프로그램 (0) | 2010.09.22 |