Section 01 SAX SAX DOM DOM API XML

  • Slides: 37
Download presentation

Section 01 SAX 개념 SAX와 DOM 처리 방식 비교 DOM 처리 방식(트리 기반 API)

Section 01 SAX 개념 SAX와 DOM 처리 방식 비교 DOM 처리 방식(트리 기반 API) XML 문서 <students> <student> … </student> </stduents> SAX 처리 방식(이벤트 기반 API) 파싱 이벤트를 callback을 통해서 애플리케이션에 직접전달하는 구조 XML 문서 <students> <student> … </student> </stduents> start. Document() start. Element() characters() end. Element() end. Document() 4

Section 01 SAX 개념 SAX 기반 파서 종류 내용 JAXP(Java API for XML Processing)

Section 01 SAX 개념 SAX 기반 파서 종류 내용 JAXP(Java API for XML Processing) 썬 마이크로시스템에서 제공하는 파서 XML 4 J(XML Parser for Java) IBM에서 제공하는 파서 http: //java. sun. com/xml/jaxp/index. html http: //www. alphaworks. ibm. com/tech/xml 4 j Xerces(Xerces Java Parser) 아파치에서 prhd하는 파서 http: //xml. apache. org 오라클의 XML 파서 오라클에서 제공하는 파서 http: //technet. oracle. com/tech/xml/content. html 제임스 클락 XP 제임스 클락(James Clark)이 작성한 XML 파서 http: //www. jclark. com/xml/xp/ 크림슨 파서 아파치 그룹에서 작성한 XML 파서. J 2 SDK 1. 4. 0에 포함 http: //xml. apache. org/crimson/index. html 8

Section 01 SAX 개념 SAX 처리 구조 <? xml version=“ 1. 0” encoding=“euc-kr? >

Section 01 SAX 개념 SAX 처리 구조 <? xml version=“ 1. 0” encoding=“euc-kr? > <students> <student> <name>박미영</name> <age>25</age> </student> <name>고소영</name> <age>24</age> </students> start. Document() Event 호출 start. Element() Event 호출 SAX 응용 프로그램 character() Event 호출 end. Element() Event 호출 이벤트 핸들러 (Event Handler) end. Document() Event 호출 Error Report Event 호출 9

Section 01 SAX 개념 SAX 프로그래밍 구조 SAX 파서 객체 생성 이벤트 핸들러 객체

Section 01 SAX 개념 SAX 프로그래밍 구조 SAX 파서 객체 생성 이벤트 핸들러 객체 생성 SAXParser. Factory spf=SAXParser. Factory. new. Instance() SAXParser sp = spf. new. SAXParser(); OEvent. Handler oeh = new OEvent. Handler(); … class OEvent. Handler extends Default. Handler{} 이벤트 메소드 정의 public void start. Document() {System. out. printlin(“XML이 시작되었습니다. ”); } 이벤트 핸들러 등록 및 XML 문서 파싱 네. parse(new File. Input. Stream(“students. xml”), oeh); 프로그램 실행(이벤트 발생) SAX 파서가 미리 정의한 이벤트 메소드를 호출한다. 10

Section 02 SAX API 패키지 SAX 기본 패키지(org. xml. sax) 클래스 class Input. Sourse

Section 02 SAX API 패키지 SAX 기본 패키지(org. xml. sax) 클래스 class Input. Sourse 내용 XML 문서를 구성하는 외부 개체 하나를 표현하는 클래 스 class SAXException SAX 파서의 작동 중에 발생하는 예외 클래스 class SAXNot. Recognized. Exception SAXException을 상속하는 클래스 class SAXNot. Supported. Exception SAX 파서가 알 수 없는 특징이나 속성을 요청할 때 발생 class SAXParse. Exception SAXException을 상속하는 클래스 12

Section 02 SAX API 패키지 구현 클래스 패키지(org. xml. sax. helpers) 클래스 내용 class

Section 02 SAX API 패키지 구현 클래스 패키지(org. xml. sax. helpers) 클래스 내용 class Attributes. Impl Attributes 인터페이스의 구현 클래스 class Default. Handler Content. Handler, DTDHandler, Entity. Resolver, Error. Handler 인터페이스 를 모두 구현하는 클래스 class Locator. Impl Locator 인터페이스의 구현 클래스 class Namespace. Support SAX 파서가 사용하는 네임스페이스 로직을 캡슐화한 클래스 class Parser. Adapter SAX 1. 0의 인터페이스인 Parser를 XMLReader로 사용할 수 있도록 하는 클래스 class XMLFilter. Impl XMLReader 인터페이스와 Document. Handler 인터페이스 구현 class XMLReader. Adapter XMLFilter 인터페이스와 Entity. Resolver, DTDHandler, Content. Handler, Errorhandler 인터페이스를 모두 구현하는 클래스 class XMLReader. Factory XMLReader를 SAX 1. 0의 인터페이스인 Parser로서 사용할 수 있도록 하 는 클래스 14

Section 03 SAX API 활용 XMLReader가 지원하는 메소드 내용 Content. Handler get. Content. Handler()

Section 03 SAX API 활용 XMLReader가 지원하는 메소드 내용 Content. Handler get. Content. Handler() 현재 컨텐츠 핸들러를 반환 DTDHandler get. DTDHandler() 현재 DTD 핸들러를 반환 Entity. Resolver get. Entity. Resolver() 현재 개체 리졸버(resolver)를 반환 Error. Handler get. Error. Handler() 현재 에러 핸들러를 반환 boolean get. Feature(String name) 특성값을 반환 Object get. Property(String name) 속성값을 반환 void parse(Input. Source input) XML 문서를 파싱 void parse(String system. Id) 시스템 식별자(URI)로 지시된 XML 문서를 파싱 void set. Content. Handler(Content. Handler handler) 컨텐츠 핸들러를 설정 void set. DTDHandler(DTDHandler handler) DTD 핸들러를 설정 void set. Entity. Resolver(Entity. Resolver resolver) 개체 리졸버(resolver)를 설정 void set. Error. Handler(Error. Handler handler) 에러 핸들러를 설정 void set. Feature(String name, boolen value) 특성값을 설정 void set. Property(String name, Object value) 속성값을 설정 17

Section 03 SAX API 활용 Default. Handler클래스가 지원하는 메소드 1 메소드 내용 void characters(char[]

Section 03 SAX API 활용 Default. Handler클래스가 지원하는 메소드 1 메소드 내용 void characters(char[] ch, int start, int length) 요소의 문자 데이터를 만나면 characters() 메소드가 호출 텍스트 내용은 ch 배열의 start 인덱스에서 length 개의 문 자에 해당된다. void end. Document() 문서가 끝나는 경우에 호출 void endelement(String uri, String local. Name, String q. Name) 요소가 끝나는 경우 호출. local. Name은 XML 네임스페이 스의 접두어를 제외한 태그 이름을 의미하고, q. Name은 XML 네임스페이스의 접두어를 포함한 태그 이름을 의미 한다. void end. Prefix. Mapping(String prefix) 네임스페이스 매핑이 끝나는 경우에 호출된다. void error(SAXParse. Exception e) 복구할 수 있는 파서 에러가 발생할 때 호출 void fatal. Error(SAXParse. Exception e) 치명적인 파싱 에러가 발생하는 경우 호출 void ignorable. Whitespace(char[] ch, int start, int length) 요소 내용에서 공백문자를 무시하라는 내용이 있을 때 호 출 void notation. Decl(String name, String public. Id, String system. Id) 노테이션 선언이 있을 때 호출 void processing. Instrcution(String target, String data) 처리 명령어(PI)가 있을 때 호출 20

Section 03 SAX API 활용 Default. Handler클래스가 지원하는 메소드 2 메소드 내용 Input. Source

Section 03 SAX API 활용 Default. Handler클래스가 지원하는 메소드 2 메소드 내용 Input. Source resolve. Entity(String public. Id, 외부 개체를 검색 String system. Id) void set. Document. Locator(Locator locator) Locator 객체를 설정 void skipped. Entity(String name) 스킵하는 개체가 있는 경우 호출 void start. Document() 문서가 시작되는 경우 호출 void start. Element(String uri, String local. Name, String q. Name, Attributes attributes) 요소가 시작되는 경우 호출 local. Name은 XML 네임스페이스의 접두어를 제외한 태그 이름을 의미하고, q. Name은 XML 네임스페이스의 접두어 를 포함한 태그 이름을 의미하며, attributes는 태그에 선언 된 속성들을 의미한다. void start. Prefix. Mapping(String prefix, String uri) 네임스페이스 매핑이 시작되는 경우 호출 void unparsed. Entity. Decl(String name, String public. Id, String system. Id, String notation. Name) 파싱되지 않은 개체 선언이 있는 경우 호출 void warning(SAXParse. Exception e) 파싱 경고가 있을 때 호출 21

Section 03 SAX API 활용 XML 문서와 이벤트 핸들러 클래스 정의 XML 문서 이벤트핸들러

Section 03 SAX API 활용 XML 문서와 이벤트 핸들러 클래스 정의 XML 문서 이벤트핸들러 클래스 정의 <students> class SAXHandler extends Defaut. Handler <student> <name>박미영</name> <age>25</age> { public void start. Document() // 문서 시작 이벤트 발생 { } <phone>123 -1234</phone> </student> public void end. Document() // 문서 종료 </students> { } } 22

Section 03 SAX API 활용 SAXParser. Factory 주요 메소드 내용 static SAXParser. Factory new.

Section 03 SAX API 활용 SAXParser. Factory 주요 메소드 내용 static SAXParser. Factory new. Instance() SAXParser. Factory 객체를 생성시키는데 필요한 static 메 소드 abstract SAXParser new. SAXParser() SAXParser 객체를 생성 void set. Validating(boolean) 파싱할 XML 문서의 유효성을 검사할 것인지 지정. 기본 값은 false void set. Namespace. Aware(boolean) 파서가 네임스페이스를 지원할 것인지 지정 abstract set. Feature(String name, boolean) SAX 2. 0에서 지원하는 특정 기능을 사용할 것인지 지정 boolean is. Namespace. Aware() 현재 팩토리가 네임스페이스를 지원하는지 확인 boolean is. Validation() 현재 팩토리가 XML 문서 유효성 확인을 지원하는지 확 인 boolean get. Feature(String name) 현재 팩토리가 SAX 2. 0에서 지원하는 특정 기능을 사용 하는지 확인 24

Section 03 SAX API 활용 SAX 2 표준 선택 사항 URI 표현 기본값 네임스페이스

Section 03 SAX API 활용 SAX 2 표준 선택 사항 URI 표현 기본값 네임스페이스 지원 http: //xml. org/sax/features/namespaces true DTD 사용 http: //xml. org/sax/features/validation false DTD 존재시에만 사 용 http: //apache. org/xml/features/validation/dynamic false 외부 DTD 로드 http: //apache. org/xml/features/nonvalidating/load- true external-dtd XML 스키마 사용 http: //apache. org/xml/features/validation/schema 치명적 오류 http: //apache. org/xml/features/continue-after-fatal false -error false 25

Section 03 SAX API 활용 SAXParser 주요 메소드 내용 void parse(File f, Default. Handler

Section 03 SAX API 활용 SAXParser 주요 메소드 내용 void parse(File f, Default. Handler dh) 명시된 Default. Handler를 사용하여 XML File을 파싱 void parse(Input. Source is, Default. Handler dh) 명시된 Default. Handler를 사용하여 Input. Source에서 XML을 파싱. Input. Source로는 Input. Stream, Reader, String이 가능 void parse(Input. Stream is, Default. Handler dh) 명시된 Default. Handler를 사용하여 Input. Stream에서 XML을 파싱 void parse(Sting uri, Default. Handler dh) 명시된 Default. Handler를 사용하여 URI에서 XML을 파 싱 void set. Property(String name, boolean value) SAX 파서가 제공하는 특정 기능 사용 여부를 지정 boolean get. Property(String name) SAX 파서가 제공하는 특정 기능 사용 여부를 확인 boolean is. Namespace. Aware() SAX 파서가 네임스페이스를 지원하는지 확인 boolean is. Validating() SAX 파서가 문서 유효성 검사를 하는지 확인 27

Section 04 SAX를 활용한 XML 조작 요소 추출 요소 데이터를 추출해서 새로운 XML 문서

Section 04 SAX를 활용한 XML 조작 요소 추출 요소 데이터를 추출해서 새로운 XML 문서 작성 <? xml version=“ 1. 0” encoding=“euc-kr? > <students> <student> <name>박미영</name> <age>25</age> </student> <name>고소영</name> <age>24</age> </students> <? xml version=“ 1. 0” encoding=“euc-kr”? > <students> <name>박미영</name> <name>고소영</name> </students> 34

Section 04 SAX를 활용한 XML 조작 속성 추출 속성 데이터를 추출해서 새로운 XML 문서

Section 04 SAX를 활용한 XML 조작 속성 추출 속성 데이터를 추출해서 새로운 XML 문서 생성 <? xml version=“ 1. 0” encoding=“euc-kr? > <students> <student sno=“s 100”> <name>박미영</name> <age>25</age> </student> <student sno=“s 200”> <name>고소영</name> <age>24</age> </students> <? xml version=“ 1. 0” coding=“euc-kr”? > <students> <sno>s 100</sno> <sno>s 200</sno> </students> 35

Thank you

Thank you