2014년 10월 29일 수요일

NSXMLParser 사용법 (아이폰)

출처 : http://swilly.tistory.com/50


iOS SDK 에서 간단한 XML문서를 파싱하기 위해 제공하는 클래스로 NSXMLParser라는 놈이있다.


자세한 설명은 집어치우고,


몇가지 기본적은 메소드만 구현해줌으로서 간단하게 XML문서를 파싱하는게 가능하다.


근데 이녀석에 대한 Delegate 클래스로 제공하는 NSXMLParserDelegate가 iOS 4.0부터 추가..


으잉?


이게 뭔 X소린가 했더니, 이전버전엔 delegate 프로토콜을 상속받지 않고 그냥 구현하면 되는것이었다.


- parser:didStartElement:namespaceURI:qualifiedName:attributes:
- parser:didEndElement:namespaceURI:qualifiedName:
- parser:foundCharacters:


위에 3가지 메소드 정도만 구현해줘도, 대부분의 XML문서를 처리가 가능하다.


아래 XML문서를 처리한다고 가정하고 간단히 예를 들어보자.


<?xml version="1.0"?>
<package>
    <contents id="test01">
        <item>Hello?</item>
    </contents>
</package>


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
여는 태그를 찾았을때 호출된다. elementName은 태그명이 넘어온다. 해당 태그의 attribute는 attributeDict에 NSDictionary 타입으로 넘어온다. 중요한건 이거 두개... 나머진 API문서를 참조하자.


elementName 에는 태그명이 넘어온다. 최초로 호출히 "package"라는 녀석이 넘어올것이다.


두번째로 "contents"라는 녀석이 넘어오게 되는데 이 <contents> 태그엔 attribute가 존재한다.
[attributeDict objectForKey:@"id"]로 해당 Dictionary를 검색해보면 "test01"이라는 값을 찾을 수 있다.


세번째로 item이라는 태그를 찾은 시점에 parser:foundCharacters: 메소드를 살펴보면
파라미터로 Hello? 라는 문자열을 받을 수 있다.


마찬가지고 didEndElement 메소드의 경우 닫는태그를 찾는 시점에 호출된다.
넘어오는 파라미터는 같다.


이런식으로 해당 태그들을 찾을때마다 해당되는 Delegate 메소드가 호출되는 방식으로 이루어진다.

댓글 없음: