XML Chap 9 SAXSimple API for XML 9

  • Slides: 32
Download presentation
자바 개발자를 위한 XML Chap 9. SAX(Simple API for XML) 김만수

자바 개발자를 위한 XML Chap 9. SAX(Simple API for XML) 김만수

9. 1 XML 파서 n XML Parser n n n 프로그램에서 XML 문서의 내용을

9. 1 XML 파서 n XML Parser n n n 프로그램에서 XML 문서의 내용을 처리하거나, 내용을 변경할 경우 사용 XML 문서가 올바르게 작성되었는지 여부를 판단 XML Parser의 종류 제품명 제작사 Xerces Apace Group MSXML Microsoft XML 4 J IBM Oracle XML Parser Oracle James Clark의 XP Xames Clark Crimson Parser Apace Group (J 2 SDK 1. 4. 0에 포함) 3

9. 3. 1 XMLReader 인터페이스 메쏘드 설명 Content. Handler get. Content. Handler() 현재 컨텐츠

9. 3. 1 XMLReader 인터페이스 메쏘드 설명 Content. Handler get. Content. Handler() 현재 컨텐츠 핸들러를 리턴 DTDHandler get. DTDHandler() 현재 DTD 핸들러를 리턴 Entity. Resolver get. Entity. Resolver() 현재 Entity Resolver를 리턴 boolean get. Feature(String name) 특성(feature)의 값을 리턴 Object get. Property(String name) 속성(property)의 값을 리턴 void parse(Input. Source input) XML 문서를 파싱 void parse(String system. Id) 시스템 식별자(URI)로 지시된 XML 문서를 파싱 void set. Content. Handler(Content. Hander handler) 컨텐츠 핸들러를 설정 void set. DTDHandler(DTDHandler handler) DTD 핸들러를 설정 void set. Entity. Resolver(Entity. Resolver resolver) Entity Resolver를 설정 void set. Error. Handler(Error. Handler handler) 에러 핸들러를 설정 void set. Feature(String name, boolean value) 특성의 값을 설정 void set. Property(String name, Object value) 속성의 값을 설정 9

9. 3. 2 SAXParser 클래스 n n XMLReader 인터페이스를 Implements 한 SAX Parser Class

9. 3. 2 SAXParser 클래스 n n XMLReader 인터페이스를 Implements 한 SAX Parser Class XMLDocument. Handler와 DTDHandler Interface를 Implements A B A는 B를 B를 extends A B A는 B를 B를 implements A B A는 B를 B를 멤버변수로 사용 A B A는 B를 B를 지역변수로 사용 10

9. 3. 2 Content. Handler n SAX에서 XML문서의 이벤트를 받는 인터페이스 메쏘드 void characters(char[]

9. 3. 2 Content. Handler n SAX에서 XML문서의 이벤트를 받는 인터페이스 메쏘드 void characters(char[] ch, int start, int length) void end. Document() void end. Element(String namespace. URI, String local. Name, String q. Name) void end. Prefix. Mapping(String prefix) void ignorable. Whitespace(char[] ch, int start, int length) void processing. Instruction(String target, String data) void set. Document. Locator(Locator locator) void skipped. Entity(String name) void start. Document() void start. Element(String namespace. URI, String local. Name, String q. Name, Attribute atts) void start. Prefix. Mapping(String prefix, String uri) 11

9. 3. 2 Content. Handler start. Document() start. Element() characters() end. Element() · ·

9. 3. 2 Content. Handler start. Document() start. Element() characters() end. Element() · · · end. Element() end. Document() 12

9. 3. 4 Default. Handler 클래스 n n Entity. Resolver, DTDHandler, Document. Handler, Error.

9. 3. 4 Default. Handler 클래스 n n Entity. Resolver, DTDHandler, Document. Handler, Error. Handler 인터페이스들을 Implements한 클래스 XML 문서를 처리하기 위해 n n n Default. Handler class로 부터 상속하여 응용 클래스를 작성 Default. Handler에서 필요한 메쏘드들을 오버라이딩 p 9 -8, 9 -9 참조 13

9. 3. 4 Default. Handler 클래스 14

9. 3. 4 Default. Handler 클래스 14

15

15

16

16

9. 3. 6 Locator 인터페이스 n n XML 문서의 위치 정보 알기 메쏘드 설명

9. 3. 6 Locator 인터페이스 n n XML 문서의 위치 정보 알기 메쏘드 설명 int get. Column. Number() 현재 event가 끝나는 곳의 column 번호 int get. Line. Number() 현재 evenr가 끝나는 곳의 line 번호 String get. Public. Id 현재 문서의 event를 위한 PULIC 식별자 String get. System. Id() 현재 문서의 event를 위한 SYSTEM 식별자 19

9. 3. 7 DTDHandler 인터페이스 n n Notation이나 파싱되지 않는 Entity에 관한 정보가 필요

9. 3. 7 DTDHandler 인터페이스 n n Notation이나 파싱되지 않는 Entity에 관한 정보가 필요 할 경우 DTDHandler Intergace를 implements DTD 문서에서 Notation 선언과 파싱되지 않는 Entity의 이벤트만 처리 start. Document event가 발생하고 첫 번째 start. Element event 전에 모든 DTD event를 처리 메쏘드 설명 void notation. Desc(String name, String public. Id, String system. Id) 노테이션 선언 event를 처리 void unparsed. Entity. Desc(String name, String public. Id, String system. Id, String noation. Name) 파싱되지 않는 Entity 선언 event 20

9. 4. 2 Parser Features n Xerces Parser n n n 유효성 체크? ,

9. 4. 2 Parser Features n Xerces Parser n n n 유효성 체크? , 네임스페이스 사용여부? 등 많은 특성들을 설정할 수 있는 방법들 을 제공 SAXParser와 DOMParser 모두 사용 메쏘드 n n n void set. Feature(String feature. Id, boolean state) : 특성 설정 boolean get. Feature(String feature. Id) : 특성 설정 여부 확인 feature. Id 설명 http: //xml. org/sax/features/namespaces 네임스페이스를 처리 http: //xml. org/sax/features/validation Parsing시 유효성 체크를 수행 http: //apache. org/xml/features/validation/dynamic DTD(or Schema)가 주어진 경우 유효성 체크 http: //apache. org/xml/features/validation/schema XML Schema를 사용 http: //apache. org/xml/features/validation/schema-full-checking XML Schema full checking 기능을 수행 http: //apache. org/xml/features/validation/schema/normalizedvalue 값을 Normalize 함 http: //apache. org/xml/features/external-general-entitys 외부 일반 Entity를 포함 그 외 특성들은 p. 9 -30, 9 -31 참조 23

9. 4. 2 Parser Property n n SAXParser와 DOMParser의 속성을 설정 기능 메쏘드 n

9. 4. 2 Parser Property n n SAXParser와 DOMParser의 속성을 설정 기능 메쏘드 n n n void set. Property(String property. Id, Object value) : 속성 설정 void get. Property(String property. Id) : 설정된 속성 값 확인 property. Id n p. 9 -31, 9 -32 참조 24

9. 5 예제 프로그램 n 9. 5. 1 SAX를 이용한 주소관리 address-book. xsd address-book.

9. 5 예제 프로그램 n 9. 5. 1 SAX를 이용한 주소관리 address-book. xsd address-book. xml java 프로그램으로 처리 25

Address. Book. App. java A B A는 B를 B를 extends A B A는 B를

Address. Book. App. java A B A는 B를 B를 extends A B A는 B를 B를 implements A B A는 B를 B를 멤버변수로 사용 A B A는 B를 B를 지역변수로 사용 1 2 3 4 5 6 1. 2. 3. 4. 5. 6. address-book. xml 를 전용으로 처리하는 SAXParser용 address-book. xml를 SAXParser용 처리 프로그램 SAXParser 생성 parser에 Event 핸들러인 Address. Book. Handler 객체 설정 파서 시작 - 처리는 Address. Book. Handler 객체가 처리 모든 처리 후에 생성된 하나의 Address. Book 객체의 Reference를 27참조 출력

28

28

29

29

Address. Book. Handler. java 1 2 3 4 1. 2. 3. 4. 5. 6.

Address. Book. Handler. java 1 2 3 4 1. 2. 3. 4. 5. 6. <address-book> element를 만나면 Address. Book인 book 객체 생 성 <person> element를 만나면 Person인 person 객체 생성 person 정보를 만나면 해당 state를 설정 </person> element를 만나면 book객체에 person 추가 </name>, </email>, </phone> element를 만나면 2번 단계에서 생 성된 person 객체에 해당 정보를 설정 다른 정보 설정을 방지 하기 위해 state를 NONE으로 설정 5 6 30

Person. java 32

Person. java 32