PowerPoint 프레젠테이션

Similar documents
XML DTD

웹 프로그래밍

PowerPoint 프레젠테이션

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

Java XPath API (한글)

adfasdfasfdasfasfadf

Microsoft PowerPoint - web-part01-ch10-문서객체모델.pptx

PowerPoint Template

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

chap 5: Trees

( )부록

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

Microsoft PowerPoint 웹 연동 기술.pptx

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

어댑터뷰

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

기술문서 작성 XXE Attacks 작성자 : 인천대학교 OneScore 김영성 I. 소개 2 II. 본문 2 가. XML external entities 2 나. XXE Attack 3 다. 점검방법 3 라.

제8장 자바 GUI 프로그래밍 II

PowerPoint Presentation

Microsoft PowerPoint - Ajax

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - hci2-lecture12 [호환 모드]

17장 클래스와 메소드

JUNIT 실습및발표

PowerPoint Presentation

Microsoft PowerPoint - web-part02-ch15-문서객체조작.pptx

Chapter 4. LISTS

Microsoft PowerPoint - 04-UDP Programming.ppt

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

PowerPoint Presentation

C# Programming Guide - Types

PowerPoint 프레젠테이션

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

12-file.key

Network Programming

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

DocsPin_Korean.pages

MasoJava4_Dongbin.PDF

쉽게 풀어쓴 C 프로그래밊

JMF2_심빈구.PDF

rmi_박준용_final.PDF

Spring Data JPA Many To Many 양방향 관계 예제

한국학 온라인 디지털 자원 소개

03장

슬라이드 1

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

강의 개요

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

JAVA PROGRAMMING 실습 08.다형성

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint Presentation

교육자료

Microsoft PowerPoint - 03-TCP Programming.ppt

C++ Programming

XML Parser

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

제11장 프로세스와 쓰레드

Week13

1장. 리스트

02 C h a p t e r Java

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

Frama-C/JESSIS 사용법 소개

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

2 Application Name: Day10_yhg <LinearLayout android:layout_weight="3" > /> an

금오공대 컴퓨터공학전공 강의자료

13ÀåÃß°¡ºÐ

슬라이드 1

3장

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

PowerPoint Presentation

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

JAVA PROGRAMMING 실습 09. 예외처리

chap 5: Trees

슬라이드 1

04장

Network Programming

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Lab 3. 실습문제 (Single linked list)_해답.hwp

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

PowerPoint 프레젠테이션

09-interface.key

01-OOPConcepts(2).PDF

PowerPoint 프레젠테이션

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

11장 포인터

리니어레이아웃 - 2 -

Transcription:

발표자윤승환 1

XML DOM DOM 의구조 예제및참고자료 2

XML XML 개요 XML 문법 XML 파서의종류 (DOM, SAX) DOM 의구조 트리구조도 DOM 인터페이스 DOM DOM 개요 DOM 사용목적 DOM 장점과단점 예제및참고자료 XML 파일 DOM 파싱 DOM 인터페이스추가내용 웹서버에 XML 파일 DOM 파싱 3

XML 의개요 extensible Markup Language( 확장가능한마크업언어 ) 의약자 - 확장가능 : 기존에없던것을새롭게만듬 - 마크업 : 문서의논리적인구조와내용기술 데이터구조가정의된텍스트의집합 문서의구조를임의의 DTD 를선언하고 Tag 를정의함으로써문서를표현가능 XML tag 들은문서의구조혹은데이터의의미를표현 4

XML 문법 원소 (Element) 원소 (Elements) 는 XML 문서에서핵심구성요소 태그 (Tag) 태그는원소를구성하기위해사용 < 원소이름 > 과같은시작태그가원소의 시작, </ 원소이름 > 같은마침태그가원 소의마지막을표시 속성 (Attribute) 속성은원소 (element) 에대한부가적인 정보를제공 속성은원소의시작태그안에위치 속성은 name/value 쌍으로나타난다. 원소 <go what = name > 라현태 </go> 끝태그 내용 속성 시작태그 5

XML 문법 PCDATA(parsed character data) PCDATA 는파서 ( 해석기, parser) 에의해해석이될텍스트 XML 요소의시작태그와마침태그사이에위치한텍스트 CDATA(character data) CDATA 는파서 ( 해석기, parser) 에의해해석이되지않을텍스트 <![CDATA[ 로시작하여, ]]> 로끝나는영역은그대로출력 '<', '>', '&' 같은특수문자를사용할때 CDATA 로감싸면됨 엔터티 (Entities) XML 에서엔터티는변수와비슷한개념으로생각할수있음엔터티는문서내에서참조될수있는문자집합의단위 HTML 문서에서 " 가엔터티참조의한예 예제 )PCDATA 와 CDATA 의차이점 6

XML 파서의종류 DOM (Document Object Model) 가장대표적인트리기반 API 다양한분야의응용프로그램에사용가능 XML 문서가큰경우많은시스템자원을사용 SAX (Simple API for XML) 가장대표적인이벤트기반 API DOM에비해간단한구조 시스템자원을적게사용 기능면에서 DOM 만큼강력하지못함 7

DOM 의개요 DOM(Document Object Model) 정의 객체지향모델로구조화된문서표현 플랫폼 / 언어중립적사용 W3C 에의해표준화 DOM 의특징 객체모델기반 API 노드 (node) 단위로데이터처리 문서의구조와내용을객체로이용 메모리적재방식 8

DOM 의처리과정 XML 문서 DOM 파서 9

DOM 의특징 DOM은문서를객체로표현하고처리할수있는방법을제공 문서에서표현되는데이터를노드로표현 새로운내용을삽입, 변경, 삭제작업수월 XML문서의 element, attribute, entity, comment, processing instruction, text 등이 DOM 에서는객체로정의되어있음 / people person DOM 파싱 name TomSmith pet Putty 목적 : 어떠한환경이나애플리케이션에서도사용할수있는표준프로그래밍인터페이스를제공. 10

DOM 의장점, 단점 DOM 장점 XML 문서조작을위한인터페이스 XML 모델처리시범프로그램적으로사용될수있는공통적인수단제공공통인터페이스공유를통해프로그래머생산성향상 DOM 단점큰규모의 XML 문서를다루는데는비효율적대안으로 SAX (Simple API for XML) 11

DOM 트리구조도 예제 XML 파일 <?xml version="1.0" encoding="utf-8"?> <apps> <app> <title>traveldiary</title> <price format="dollar">5.99</price> <repdate>04/06/2012</repdate> </app> <info> <provider>apple</provider> <version>2</version> </info> </apps> 12

DOM 트리구조도 예제 XML 데이터을 DOM 구조로읽어왔을때구조 apps app info title price repdate provider version Format dollar 04/06/ traveldiary 5.99 apple 2 2012 13

DOM 인터페이스 DOM 파서속성 (Attribute) childnodes : 현재요소의자식을배열로표현 firstchild : 현재요소의첫번째자식 lastchild : 현재요소의마지막자식 previoussibling : 현재요소의바로이전요소를의미 nextsibling : 현재요소의바로다음의요소를의미 nodevalue : 해당요소의값을읽고쓸수있는속성정의 (=data) parentnode : 해당요소의부모노드 14

DOM 인터페이스 DOM 파서메소드 ( 문서 ) getelementbyid(id) - 도큐먼트에서특정한 id 속성값을가지고있는요소를리턴 getelementsbytagname(name) - 특정한태그이름을가지고있는자식요소로구성된배열을리턴 haschildnodes() - 해당요소가자식요소를포함유무판단 (Boolean 값리턴 ) getattribute(name) - 특정한 name 에해당하는요소의속성값을리턴 document.createelement(tagname) -tagname 으로된엘리먼트를생성 document.createtextnode(text) - 정적텍스트를담고있는노드를생성 15

DOM 인터페이스 DOM 파서메소드 (element) <element>.appendchild(childnode) - 특정노드를현재엘리먼트의자식노드에추가 <element>.getattribute(name) - 속성명이 name 인속성값을반환 <element>.setattribute(name, value) - 속성값 value 를속성명이 name 인곳에저장 <element>.insertbefore(newnode, tartgetnode) -newnode 를 tartgetnode 전에삽입 16

DOM 인터페이스 DOM 파서메소드 (element) <element>.removeattribute(name) - 엘리먼트에서 name 속성을제거 <element>.removechild(childnode) - 자식엘리먼트를제거 <element>.replacechild(newnode, oldnode) -oldnode 를 newnode 로치환 <element>.haschildnodes() - 자식노드가존재하는지여부를판단 ( 리턴 Boolean) 17

예제 Test.xml 이라는 xml 파일을 domparsing 하여 화면에필요한구성을출력한다. 파일구성 DOMEx.java test.xml 18

test.xml파일생성하여 XML파일을 DOM파싱 1. DOMEx 이라는프로젝트를생성 2. DOMEx/res/raw폴더에 test.xml파일을생성 3. DOMEx/src/te.exam/DOMEX.java파일에 DOM파싱소스추가 4. AVD manager를통해출력이제대로되는지확인 19

1.DOMEx 이라는프로젝트를생성합니다. 20

21

22

23

2. DOMEx/res/raw 폴더에 test.xml 파일을생성합니다. 24

2. DOMEx/res/raw 폴더에 test.xml 파일을생성합니다. 25

26

27

Item 노드속성의 Value Item 노드의 firstchild <?xml version="1.0" encoding="utf-8"?> <status> <item studentid="20081579" name=" 윤승환 "> 컴퓨터공학과 </item> <item studentid="20081537" name=" 라현태 "> 컴퓨터공학과 </item> <item studentid="20081611" name=" 제갈민재 "> 컴퓨터공학과 </item> <item studentid="20091511" name=" 배동혁 "> 컴퓨터공학과 </item> </ status > Item 노드속성의 Name Item 노드리스트 28

3. DOMEx/src/te.exam/DOMEX.java 파일에 DOM 파싱소스를추가합니다. 29

import java.io.inputstream; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.namednodemap; import org.w3c.dom.node; import org.w3c.dom.nodelist; import org.w3c.dom.text; import javax.xml.parsers.*; import org.w3c.dom.*; 30

Dom 파서생성 try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder b = factory.newdocumentbuilder(); InputStream is = getresources().openrawresource(r.raw.test); Document doc = b.parse(is); Element root = doc.getdocumentelement(); 리소스파일가져오기 31

NodeList items = root.getelementsbytagname("item"); String result = ""; for ( int i = 0 ; i < items.getlength() ; i++ ) { 동일한태그이름에 Node item = items.item(i); 해당하는 Node 가져오기 Text data = (Text) item.getfirstchild(); result += data.getdata() + "\n"; 32

NamedNodeMap attrs = item.getattributes(); for ( int j = 0 ; j < attrs.getlength(); j++ ) { 각 item 노드가가지고 Node attr = attrs.item(j); 있는속성가져오기 result += attr.getnodename(); result += "="; result += attr.getnodevalue() + "\n"; } result += "\n"; } 33

et.settext(result); } catch (Exception e) { Log.d("TAG", e+"dom fail"); } 예외처리 } }); } } 34

35

36

1)DOM 인터페이스프로퍼티, 함수설명 2) 트위터 xml 으로 dom 파싱하여출력하기 37

Property ( 프로퍼티 ) 객체의정보에접근하는메소드 대괄호 [ ] 를사용하지않고객체의정보에접근 요소의정보, 속성에대한구체적인값, 속성값 참고 http://cafe.naver.com/appforge/1159 38

DOM 인터페이스 - Node DOM 객체가만들어지는기본인터페이스 프로퍼티타입설명 nodename DOMString(Read) 노드의이름, 타입에따라다른이름반환 nodevalue DOMString 노드의값, 타입에따라다른값을반환 nodetype unsingned short (Read) 노드의타입 parentnode Node(Read) 이노드의부모노드 childnode NodeList(Read) 이노드의자식노드를포함하는 NodeList 자식노드가없으면빈 NodeList 반환 firstchild Node(Read) 이노드의첫번째자식노드 lastchild Node(Read) 이노드의마지막자식노드 previoussibling Node(Read) 이노드의바로앞노드 nextsibling Node(Read) 이노드의바로뒤노드 39

DOM 인터페이스 - Node 프로퍼티타입설명 attributes NamedNodeMap (Read) 이노드의어트리뷰트를포함하는 NamedNodeMap ownerdocument DOMStirng(Read) 이노드가속한도큐먼트 namespaceuri DOMString(Read) 이노드의네임스페이스 URI prefix DOMString 네임스페이스접두어 localname DOMString(Read) 노드의 Qname 부분이름을반환 프로퍼티참고 40

DOM 인터페이스 - Node 함수 Node insertbefore(node newchild, Node refchild) Node replacechild(node newchild, Node oldchild) Node removechild(node oldchild) Node appendchild(node newchild) boolean haschildnodes() Node clonenode(boolean deep) void normlize() boolean supports(domstring feature, DOMString version) 설명 존재하는 refchild 앞에 newchild 를삽입 refchild 가 NULL 이면리스트끝에삽입 oldchild 를 newchild 로대체 oldchild 를반환 리스트에서 oldchild 를제거하고그것을반환 리스트끝에 newchild 를추가하고그것을반환 노드에자식이있으면 true, 없으면 false 이노드를반환, 파라미터가 true 이면노드의하위트리까지복사하고그렇지않으면그노드만복사 복수의근접한 Text 자식노드가있으면그것을합침 DOM 구현체가넘겨받은특징을지원하는지여부검사, 지원하면 true, 아니면 false 41

DOM 인터페이스 Document 전체 XML 문서를표현 Node 인터페이스상속 프로퍼티타입설명 DocType DocumentType(Read) 이문서와연결된문서형식을표현하는 Document Type 객체반환 정의된문서형식이없다면 NULL반환 Implementation DOMImplementation (Read) 이문서에사용된 DOMImplementation 객체 DocumentElement Element(Read) 이문서의루트엘리먼트 42

DOM 인터페이스 Document 함수 Element createelement(domstring tagname) DocumentFragment createdocumentfragment() Text create TextNode(DOMString data) Comment createcomment(domstring data) 설명 지정된이름으로엘리먼트를생성빈 DocumentFragment 객체를생성 data에텍스트를포함하는 Text 노드를생성 data에텍스트를포함하는 Comment 노드를생성 CDATASection createcdatasection(domstring data) ProcessingInstruction createprocessinginstruction(domstring target, DOMString data) Attr createattribute(domstring name) EntityReference createentityreference(domstring name) data 에텍스트를포함하는 CDATASection 노드를생성 지정된 target 과 data 를가지는 ProcessingInstruction 노드를생성 지정된 name 을가지는어트리뷰트를생성 지정된 name 으로엔티티참조생성 43

DOM 인터페이스 Document 함수 NodeList getelementsbytagname(domstringtagname) Node importnode(node importednode, boolean deep) 설명 문서에서이 tagname 을가진모든엘리먼트를 NodeList 로반환, 엘리멘트문서에있는순서로반환 다른문서에서 importednode 를가져옴. 이전문서에서원래노드지원하지않고복제 Element createelementns(domstringanmespaceuri, DOMStringqualifiedName) Attr createattributens(domstringnamespaceuri, DOMStringqualifiedName) NodeList getelementsbytagnamens(domstring namespaceuri, DOMString localname) Element getelementbyld(domstringelementid) 지정된네임스페이스와 Qname 로엘리먼트를생성 지정된네임스페이스와 Qname 로어트리뷰트를생성 지정된부분이름을가지고 namespaceuri 에의해서정해지는네임스페이스안에있는모든엘리먼트 NodeList 로반환 elementid 를가진엘리먼트를반환 44

DOM 인터페이스 DOMImplementation 특정문서에종속적이지않은어떤문서라도사용할수있는함수제공 함수 boolean hasfeature(domstring feature, DOMString version) DocumentType createdocumenttype(domstring qualifiedname, DOMString publicid, DOMString systemid, DOMString internalsubset) Document createdocument(domstring namespaceuri, DOMString qulifiedname, DocumentType doctype) 설명 이 DOM 구현체가요청받은 feature 를지원하는지여부를반환 version 은테스트할이특징의버전 지정된어트리뷰트를가지고 Document Type 객체를만듬 지정된 qualifiedname 을가지고 Document 객체를만듬 45

DOM 인터페이스 NodeList 인덱스로접근이가능한노드그룹을포함 프로퍼티타입설명 Length unsigned long(read) 리스트에포함된노드의수. 유요 숫자는 0 부터 length-1까지 함수 설명 boolean hasfeature(domstring feature, 이 DOM 구현체가요청받은 feature를 DOMString version) 지원하는지여부를반환함수 version설명은테스트할이특징의버전 DocumentType Node item(unsigned createdocumenttype(domstring long 인덱스에해당하는지정된노드를어트리뷰트를반환. 인덱스가가지고길이와 Document qualifiedname, index) DOMString publicid, 같거나 DOMString 더크면 NULL Type 을객체를반환만듬 systemid, DOMString internalsubset) Document createdocument(domstring namespaceuri, DOMString qulifiedname, DocumentType doctype) 지정된 qualifiedname 을가지고 Document 객체를만듬 46

DOM 인터페이스 - Element Element 관련된함수제공 Node 인터페이스에서상속 프로퍼티타입설명 agname DOMString(Read) 엘리먼트이름 함수 OMString getattribute(domstring name) void setattribute(domstring name, DOMString value) void removeattribute(domstring name) void getattributenode(domstring name) 설명 지정된 name 으로어트리뷰트값을반환, 어트리뷰트가값을가지고있지않으면빈문자열반환 특정어트리뷰트에새로운값할당. 해당어트리뷰트가존재하지않으면새롭게생성 어트리뷰트제거, 어트리뷰트가기본값을가지고있으면이기본값을가진동일어트리뷰트로대체 name 을가진 Attr 노드를반환, 어트리뷰트가존재하지않으면 NULL 반환 47

DOM 인터페이스 - Element 함수 Attr setattributenode (Attr newattr) Attr removeattributenode(attr oldattr) 설명 새로운어트리뷰트노드추가. 동일한이름을가진것이이미있으면치환 지정한 Attr 노드를제거하고반환 NodeList getelementsbytagname(domstring name) 주어진노드이름을가진모든자손들을 NodeList 로반환 DOMString getattributens(domstring namespaceuri, DOMString localname) void setattributens(domstring namespaceuri, DOMStirng qualifiedname, DOMString value) void removeattributens(domstring namespaceuri, DOMString localname) Attr getattributenodens(domstring namespaceuri, DOMString locarname) Attr setattributenodens(attr newattr) 지정된어트리뷰트값을반환, 어트리뷰트가지정되지않거나값이없으면빈문자열을반환 지정된어트리뷰트에새로운값을할당 지정된어트리뷰트제거 지정된어트리뷰트를가진 Attr 노드를반환 리스트에 Attr 노드를추가 48

DOM 인터페이스 - NamedNodeMap 노드의집합을순서없이제공 노드들은이름으로추출가능 프로퍼티타입설명 length unsigned long(read) 이맵에있는노드의개수 함수 설명 Node getnameditem(domstring name) 지정된 name 을 nodename 으로가진 Node 를반환 Node setnameitem(node arg) Node removenameditem(domstirng name) Node item(unsigned long index) Node setnameditmens(node arg) arg 파라미터는추가될 Node 객체. nodename 프로퍼티가이름을위해사용 지정된이름을가진 Node 가제거되고그것을반환 지정된인덱스를가진노드반환 arg 파라메터는추가될 Node 객체 49

DOM 인터페이스 - Attr Attribute 를다루는데필요한프로퍼티제공 Node 인터페이스상속 프로퍼티타입설명 Name DOMStirng(Read) 어트리뷰트이름 Specified boolean(read) 어트리뷰트가지정되었는지여부를 알려줌 Value DOMString 어트리뷰트값 owerelement Element(Read) 어트리뷰트가속한엘리먼트를표현 50

DOM 인터페이스 - CharacterData 문자데이터를다루는데필요한프로퍼티, 함수제공 Node 인터페이스상속 프로퍼티타입설명 Data DOMString CharacterData 노드의 텍스트 length Unsigned long(read) 이노드에있는문자수 함수 DOMString substringdata(unsigned long offset, unsigned long count) void appenddata(domstring arg) void insertdata(unsigned long offset, unsigned long count) void deletedata(unsigned long offset, unsigned long count) 설명 offset 으로시작하는부분의문자열을반환, count 만큼문자열반환 문자열뒤에 arg 를붙임 문자열의가운데 offset 으로시작하는부분에 arg 문자열삽입 offser부터문자열부분을제거, count만큼문자열제거 51

DOM 인터페이스 - Text 텍스트노드를다루는데필요한함수제공 CharacterData 인터페이스를상속 함수 Text splittext(unsigned long offset) 설명 하나의 Text 노드를인접한두개의 Text 노드로나눔 offset 까지첫번째노드, 그이후가두번째노드 52

예제 2-1 Yoonseunghwan 이라는 Twiter 사용자의최근게시물 3 개의내용을출력한다. URL:http://twitter.com/statuses/user_timeline.xml?screen_name=correct05&count=3 파일구성 Twiter_parsingtest.java main.xml 53

54

55

56

Element statuses = doc.getdocumentelement(); statuses NodeList statuslist = statuses.getelementsbytagname("status"); status id text user Value Value id name Value Value NodeList textlist = ((Element)statusList.item(i)).getElementsByTagName("text"); Node text = textlist.item(0); text.getfirstchild().getnodevalue() 참고 57

statuses status NodeList userlist = ((Element)statusList.item(i)).getElementsByTagName("user"); id text user Value Value text id text name Value Value Node username = userlist.item(0).getfirstchild().getnextsibling().getnextsibling().getnextsibling(); username.getfirstchild().getnodevalue(); 58

twitter_parsingtest.java package exam.twiter; import java.net.*; import javax.xml.parsers.*; import org.w3c.dom.*; import android.app.*; import android.os.*; import android.view.*; import android.widget.*; public class twitter_parsingtest extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.downxml); Button btn = (Button) findviewbyid(r.id.down); btn.setonclicklistener(new Button.OnClickListener() { HTML addr을사용하여 URL 객체생성 public void onclick(view v) { String xml; String url; String name = correct05"; String output = ""; int count = 3; url = "http://twitter.com/statuses/user_timeline.xml?screen_name= + name + "&count=" + count; xml = DownloadHtml(url); EditText result = (EditText) findviewbyid(r.id.result); 59

try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newdocumentbuilder(); InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8")); Document doc = builder.parse(istream); Stream 형태로입력을받아 parsing Element statuses = doc.getdocumentelement(); twitter_parsingtest.java Dom 파서생성 root 엘리먼트 NodeList statuslist = statuses.getelementsbytagname("status"); statuses child 엘리먼트중 status 의 List status status status 60

twitter_parsingtest.java statuses status status status for (int i = 0; i < statuslist.getlength(); i++) { NodeList textlist = ((Element)statusList.item(i)).getElementsByTagName("text"); NodeList userlist = ((Element)statusList.item(i)).getElementsByTagName("user"); Node username = userlist.item(0).getfirstchild().getnextsibling().getnextsibling().getnextsibling(); Node text = textlist.item(0); String uname = username.getfirstchild().getnodevalue(); output += uname + " : "; output += text.getfirstchild().getnodevalue() + "\n\n"; } } catch (Exception e) { Toast.makeText(v.getContext(), e.getmessage(), 0).show(); } result.settext(output); }}); 61

twitter_parsingtest.java statuses status for (int i = 0; i < statuslist.getlength(); i++) { NodeList textlist = ((Element)statusList.item(i)).getElementsByTagName("text"); NodeList userlist = ((Element)statusList.item(i)).getElementsByTagName("user"); Node username = userlist.item(0).getfirstchild().getnextsibling().getnextsibling().getnextsibling(); Node text = textlist.item(0); String uname = username.getfirstchild().getnodevalue(); output += uname + " : "; output += text.getfirstchild().getnodevalue() + "\n\n"; } } catch (Exception e) { Toast.makeText(v.getContext(), e.getmessage(), 0).show(); } result.settext(output); }}); text 62

twitter_parsingtest.java statuses status user user for (int i = 0; i < statuslist.getlength(); i++) { NodeList textlist = ((Element)statusList.item(i)).getElementsByTagName("text"); NodeList userlist = ((Element)statusList.item(i)).getElementsByTagName("user"); Node username = userlist.item(0).getfirstchild().getnextsibling().getnextsibling().getnextsibling(); Node text = textlist.item(0); String uname = username.getfirstchild().getnodevalue(); output += uname + " : "; output += text.getfirstchild().getnodevalue() + "\n\n"; } } catch (Exception e) { Toast.makeText(v.getContext(), e.getmessage(), 0).show(); } result.settext(output); }}); 63

twitter_parsingtest.java user text id text name Value Value for (int i = 0; i < statuslist.getlength(); i++) { NodeList textlist = ((Element)statusList.item(i)).getElementsByTagName("text"); NodeList userlist = ((Element)statusList.item(i)).getElementsByTagName("user"); Node username = userlist.item(0).getfirstchild().getnextsibling().getnextsibling().getnextsibling(); Node text = textlist.item(0); String uname = username.getfirstchild().getnodevalue(); output += uname + " : "; output += text.getfirstchild().getnodevalue() + "\n\n"; } } catch (Exception e) { Toast.makeText(v.getContext(), e.getmessage(), 0).show(); } result.settext(output); }}); 64

twitter_parsingtest.java user #text id #text name Value Value for (int i = 0; i < statuslist.getlength(); i++) { NodeList textlist = ((Element)statusList.item(i)).getElementsByTagName("text"); NodeList userlist = ((Element)statusList.item(i)).getElementsByTagName("user"); Node username = userlist.item(0).getfirstchild().getnextsibling().getnextsibling().getnextsibling(); Node text = textlist.item(0); String uname = username.getfirstchild().getnodevalue(); output += uname + " : "; output += text.getfirstchild().getnodevalue() + "\n\n"; } } catch (Exception e) { Toast.makeText(v.getContext(), e.getmessage(), 0).show(); } result.settext(output); }}); 65

} twitter_parsingtest.java String DownloadHtml(String addr) { StringBuilder html = new StringBuilder(); try { URL url = new URL(addr); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); } if (conn!= null) { conn.setconnecttimeout(10000); conn.setusecaches(false); if (conn.getresponsecode() == HttpURLConnection.HTTP_OK) { BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream())); for (;;) { String line = br.readline(); if (line == null) break; html.append(line + '\n'); } br.close(); } conn.disconnect(); } } catch (Exception ex) {;} return html.tostring(); 연결속성설정 getreponse 메소드로요청을보내고요청이정상적으로리턴되면입력스트림으로부터 HTML 문서를읽어들인다. 66

결과 Yoonseunghwan 이라는 Twiter 사용자의최 근게시물 3 개의내용을출력한다. 파일구성 Twiter_parsingtest.java main.xml 67