370 likes | 604 Views
ㅎㅎ. XML 조작을 위한 SAX 활용. SAX 개념 SAX API 패키지 SAX API 활용 SAX를 활용한 XML 조작. 10 장 . XML 조작을 위한 SAX 활용. 학습목표 SAX 개념 이해 SAX 인터페이스 구조 이해 SAX API 패키지 학습과 응용 SAX API 를 활용한 XML 문서 조작 프로그램 실습. SAX 개념 Simple API for XML 의 약자 DOM 단점을 극복하는 대안으로 등장 DOM 단점 : XML 문서가 커질 경우 메모리 소모가 크다
E N D
ㅎㅎ XML 조작을 위한 SAX 활용 • SAX 개념 • SAX API 패키지 • SAX API 활용 • SAX를 활용한 XML 조작
10장. XML 조작을 위한 SAX 활용 • 학습목표 • SAX 개념 이해 • SAX 인터페이스 구조 이해 • SAX API 패키지 학습과 응용 • SAX API를 활용한 XML 문서 조작 프로그램 실습
SAX 개념 Simple API for XML의 약자 DOM 단점을 극복하는 대안으로 등장 DOM 단점: XML 문서가 커질 경우 메모리 소모가 크다 XML 문서 전체를 처음부터 끝까지 차례대로 읽어들이면서 처리하는 구조 적은 메모리를 가진 시스템에서 XML 문서를 처리할 수 있다는 장점 Section 01SAX 개념
SAX와 DOM 처리 방식 비교 DOM 처리 방식(트리 기반 API) SAX 처리 방식(이벤트 기반 API) 파싱 이벤트를 callback을 통해서 애플리케이션에 직접전달하는 구조 XML 문서 <students> <student> … </student> </stduents> XML 문서 <students> <student> … </student> </stduents> startDocument() startElement() startElement() characters() endElement() endElement() endDocument() Section 01SAX 개념
DOM과 SAX는 구분되는 특징 Section 01SAX 개념
SAX 인터페이스 구조와 이벤트 프로그래밍 A: XML 파서가 구현, XML 애플리케이션이 호출하는 인터페이스 B: XML 애플리케이션이 구현하고, XML 파서가 이벤트로 호출하는 인터페이스= 콜백 인터페이스 SAX 응용프로그램 XML 파서 XML 문서 A 이벤트 발생 이벤트 등록 XML 파서 SAX 응용프로그램 B 인터페이스 이벤트 핸들러 실행 Section 01SAX 개념
SAX 발전 과정 Section 01SAX 개념
Section 01SAX 개념 • SAX 기반 파서
SAX 처리 구조 <?xml version=“1.0” encoding=“euc-kr?> <students> <student> <name>박미영</name> <age>25</age> </student> <student> <name>고소영</name> <age>24</age> </student> </students> startDocument() Event 호출 SAX 응용 프로그램 이벤트 핸들러 (Event Handler) startElement() Event 호출 character() Event 호출 endElement() Event 호출 endDocument() Event 호출 Error Report Event 호출 Section 01SAX 개념
SAX 프로그래밍 구조 SAX 파서 객체 생성 SAXParserFactory spf=SAXParserFactory.newInstance() SAXParser sp = spf.newSAXParser(); OEventHandler oeh = new OEventHandler(); … class OEventHandler extends DefaultHandler{} 이벤트 핸들러 객체 생성 public void startDocument() {System.out.printlin(“XML이 시작되었습니다.”); } 이벤트 메소드 정의 네.parse(new FileInputStream(“students.xml”), oeh); 이벤트 핸들러 등록 및 XML 문서 파싱 SAX 파서가 미리 정의한 이벤트 메소드를 호출한다. 프로그램 실행(이벤트 발생) Section 01SAX 개념
Section 02SAX API 패키지 • SAX 기본 패키지(org.xml.sax) 인터페이스
SAX 기본 패키지(org.xml.sax) 클래스 Section 02SAX API 패키지
Section 02SAX API 패키지 • SAX 확장 패키지(org.xml.sax.ext) 인터페이스
Section 02SAX API 패키지 • 구현 클래스 패키지(org.xml.sax.helpers) 클래스
JAXP의 SAX 파서 구동 API 패키지(javax.xml.parser) 클래스 Section 02SAX API 패키지
XMLReader 인터페이스 SAX 파서를 위한 기본적은 기능 요구사항을 선언하는 인터페이스 SAX2를 사용하는 자바 프로그램은 XMLReader 인터페이스를 구현하는 클래스를 시용해서 XML 문서를 파싱할 수 있음 표준화된 API, XML 네임스페이스 동기화된 메소드 지원 Section 03SAX API 활용
XMLReader가 지원하는 메소드 Section 03SAX API 활용
ContentHandler 인터페이스 SAX에서 XML 문서의 이벤트를 받는 인터페이스 DefaultHandler 클래스와 같은 메소드를 가지고 있음 XML 파서가 문서를 파싱하는 동안에 ContentHandler 인터페이스에 정의된 메소드들이 자동적으로 호출 Section 03SAX API 활용
DefaultHandler 클래스 ContentHandler, DTDHandler, EntityResolver, ErrorHandler 인터페이스를 모두 구현하는 클래스 일반적으로 프로그래머는 XML 문서를 처리하기 위해서 DefaultHandler 클래스로부터 상속받는 클래스를 작성하고, DefaultHandler에서 필요한 메소드를 오버라이딩해서 재정의한다. Section 03SAX API 활용
Section 03SAX API 활용 • DefaultHandler클래스가 지원하는 메소드 1
Section 03SAX API 활용 • DefaultHandler클래스가 지원하는 메소드 2
이벤트핸들러 클래스 정의 XML 문서 <students> <student> <name>박미영</name> <age>25</age> <phone>123-1234</phone> </student> </students> class SAXHandler extends DefautHandler { public void startDocument() // 문서 시작 { } public void endDocument() // 문서 종료 { } } 이벤트 발생 Section 03SAX API 활용 • XML 문서와 이벤트 핸들러 클래스 정의
SAXParserFactory 클래스 javax.xml.parsers.SAXParserFactory에 지정됨 소스 코드의 변화 없이도 다른 벤더의 파서를 사용할 수 있게 하기 위해 아파치 그룹의 Xerces에서 제공하는 기능 XML 문서 처리에 필요한 SAXParser를 생성, SAXParser가 파싱하는데 필요한 여러 선택 사항을 만드는 역할 Section 03SAX API 활용
SAXParserFactory 주요 메소드 Section 03SAX API 활용
Section 03SAX API 활용 • SAX 2 표준 선택 사항
Section 03SAX API 활용 • SAXParser 클래스 • SAXParser 객체의 생성은 SAXParserFactory.newSAXParser() 메소드 사용한다. • SAXParser 객체가 XML 문서를 파싱하려면 이벤트 처리기인 DefaultHandler로 이벤트가 전달되어 미리 정의된 이벤트 메소드 호출한다. • SAXParser의 메소드 중 대부분은 parse() 메소드의 오버로드(overload)로 이루어져 다양한 소스에서 XML 문서 처리가 가능하다.
SAXParser 주요 메소드 Section 03SAX API 활용
Attributes 인터페이스 XML 속성 목록을 위한 인터페이스 타입 Attributes 인터페이스가 제공하는 메소드 Section 03SAX API 활용
Locator 인터페이스 SAX 애플리케이션에 위치 정보를 제공하는데 이용 대부분의 SAX 파서는 Locator 타입의 객체를 지원 Locator 인터페이스가 제공하는 메소드 Section 03SAX API 활용
ErrorHandler 인터페이스 SAX 파서가 XML 문서를 파싱하는 중 발견하지 못한 오류와 경고를 핸들링하기 위한 특별한 인터페이스 SAX 파서가 오류를 만났을 때 SAX 프로세스를 중지할 것인지, 오류를 무시하고 계속 진행 할 것인지 결정 오류 처리를 위한 3가지 이벤트 메소드 제공 fatalError() 메소드 error() 메소드 warning() 메소드 Section 03SAX API 활용
치명적인 에러: fatalError() 메소드 XML 문서가 정형식 문서가 아닐 때 발생하는 에러 XML 파서는 치명적인 에러가 발생하면 파싱 작업을 종료 SAXParseException 예외를 발생시킴 SAXParseException의 메소드 Section 03SAX API 활용
에러: error() 메소드 XML 문서가 유효성을 위반할 때 발생 DTD 문서와 유효성을 체크하는 파서를 사용할 때 발생 단, 유효성을 체크하지 않은 파서에서도 XML 시작부에서 version 속성이 1.0이 아닐 때도 발생 XML 문서를 처리하는 프로그램은 에러를 처리하는 루틴을 작성하는 경우에 유효성 체크에서 에러 메시지를 출력 에러처리 루틴을 작성하지 않은 경우, 유효하지 않은 문서라도 메시지를 출력하지 않음 에러 처리 루틴은 error() 메소드 Section 03SAX API 활용
Section 03SAX API 활용 • 경고: warning() 메소드 • SAX 파서가 DTD를 처리하는 동안에 발생 • 오류는 아니지만 파싱에 장애가 생기는 문제를 발견했을 때 호출되는 메소드 • 경고가 발생하면, warning() 메소드가 호출 ※SAX에서 치명적인 에러, 에러, 경고를 처리하려면 DefaultHandler의 메소드를 오버라이드한다. DefaultHandler는 에러 처리를 위한 ErrorHandler 인터페이스를 구현하기 때문이다.
Section 04 SAX를 활용한 XML 조작 • 요소 추출 • 요소 데이터를 추출해서 새로운 XML 문서 작성 <?xml version=“1.0” encoding=“euc-kr?> <students> <student> <name>박미영</name> <age>25</age> </student> <student> <name>고소영</name> <age>24</age> </student> </students> <?xml version=“1.0” encoding=“euc-kr”?> <students> <name>박미영</name> <name>고소영</name> </students>
속성 추출 속성 데이터를 추출해서 새로운 XML 문서 생성 Section 04 SAX를 활용한 XML 조작 <?xml version=“1.0” encoding=“euc-kr?> <students> <student sno=“s100”> <name>박미영</name> <age>25</age> </student> <student sno=“s200”> <name>고소영</name> <age>24</age> </student> </students> <?xml version=“1.0” coding=“euc-kr”?> <students> <sno>s100</sno> <sno>s200</sno> </students>
태그 변환 태그 변환에 의한 새로운 XML 문서 생성 <?xml version=“1.0” encoding=“euc-kr?> <students> <student> <name>박미영</name> <age>25</age> </student> <student> <name>고소영</name> <age>24</age> </student> </students> <?xml version=“1.0” encoding=“euc-kr”?> <학생정보> <학생> <이름>박미영</이름> <나이>25</나이> </학생> <학생> <이름>고소영</이름> <나이>24</나이> </학생> </학생정보> Section 04 SAX를 활용한 XML 조작