DOM과 SAX
DOM과 SAX의 역할
SAX(API) : 큰 XML 문서를 보다 효율적으로 분석할 수 있도록 하기 위해서 개발
-> 이벤트 기반의 표준API제공, Java에 의해 정의
= 문서 전체구조 정보를 가지지 않음
= XML 문서를 읽거 나가면서 이벤트 발생
=특정 엘리먼트에 대한 이벤트 발생시 처리
= 문서의 부분을 처리할 때 유리
= 데이터 구조 조작에 유리
= 응용프로그램을 최적화 가능
= 효율성이 좋다.
SAX 파서
SAX의 필요성
장점
* SAX 파서는 XML 문서를 순차적으로 처리
* 메모리에는 현재 처리하는 데이터만 저장
* 빠르고, 메모리가 절약
* 큰 데이터 처리도 가능
단점
* 랜덤 접근 불가
-> 데이터를 읽을 수만 있고 변경은 불가
* 재사용성 불가
-> 한번 처리된 데이터는 제거되므로 재사용성이 불가
* 측면이동 불가
-> 순차적인 처리를 하므로 불가
SAX 파서에 의해 XML 문서처리
(1) 이벤트 발생기
- SAX 파서 객체를 이용하여 XML 문서를 파싱하는 과정에서 이벤트를 감지하여 이벤트를 처리기에 전달
- java.xmlSAXParser 와 org.xml.XMLReader가 담당
(2) 이벤트 처리기
- 이벤트 핸들러라는 인터페이스로 구성되며, 이 이벤트는 특정한 이벤트에 대응하는 메소드로 정의되어 있다.
- SAX 2.0 API에는 org.xml.sax 패키지에 ContentHandler, DTDHandler, EntityResolver, Error Handler가 있다.
- org.xml.helper패키지의 Defaulthandle는 4개의 코어 핸들러 클래스에 포함되는 모든 콜백의 디폴트 구현을 제공
☆ SAX프로세싱에 자주 사용되는 클래스
☆ Javax.xml.parsers.SAXParserFactory의 메소드
☆ Javax.xml.parsers.SAXParser의 메소드
- SAXParsers 클래스의 메소드들은 InputStream, URL, 파일, 문자열 등 다양한 소스에서
XML 문서를 파싱하는 클래스이다.
(3) 파싱
(4) 이벤트 핸들러
SAX의 한계점
★ 데이터를 SAX가 주는 순서대로 받는다.
- 파서가 문서를 탐색하는 순서는 통제 할 수 없다.
★ SAX방식에서는 사전식 정보를 주지 않음
★ SAX 1.0에는 DTDHandler 인터페이스가 정의 되어 있어도 DTD에 대한 어떤 실제적 정보도 제공하지 못함
★ 읽기 전용
- 문서의 요소들을 조절할 수 없다.