2013년 4월 25일 목요일

iOS 프로그래밍 팁 - XMLParser


XML 파싱을 위해서는 NSXMLParserDelegate를 구현해야 한다.

헤더 파일에 아래와 같이 <NSXMLParserDelegate>를 추가 한다.

@interface AlumnusViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, NSXMLParserDelegate>


그리고 NSXMLParserDelegate 함수를 구현 한다.
#pragma mark XMLParse delegate methods

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    
   //xml 엘리먼트 종류 별로 분류 elementType 변수에 설정 한다....
.....
    [_xmlValue setString:@""];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    
    if (elementType != kBOARDXML)
        return;
    
    if ([elementName isEqualToString:@"boardName"]) {
        [boardData setValue:[NSString stringWithString:_xmlValue] forKey:elementName];
    }
 
//위와 같은 방법으로 엘리먼트 문자열을 비교하여 boardData와 같은 파싱에 결과가 되는
//NSMutableDictionary 에 값을 설정 한다.

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

//파서에 들어오는 string을 NSMutableString *_xmlValue에 추가하는 작업을 한다.

    if (elementType == kBOARDXML) {
        if (!_xmlValue) {
            _xmlValue = [[NSMutableString alloc]initWithCapacity:0];
        }
        [_xmlValue appendString:string];
    }
    
 
}



 통신에 결과로  XML데이터를 수신 하였을 경우


- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSXMLParser* parser = [[[NSXMLParser alloc] initWithData:receiveData] autorelease];
    [parser setDelegate:self];
    [boardData removeAllObjects];
    [boardParseData removeAllObjects];
    BOOL success = [parser parse];
    if (success) {
        NSLog(@"XML parse success");
        //테이블 작업....

//파싱에 결과로 생성된 baoradData, boardParseData의 키 밸류를 적절히 활용한다.


        
    }else {
        NSLog(@"XML parse ERROR");
    }



connectionDidFinishLoading 메서드에서 receiveData를 parser로 할당 하고
[parser parse] 메세지가 성공하면 xml 파싱이 성공한 것이다.

success 가 YES일때 파싱 성공에 의해 생성된  NSMutableDictionary 객체 boardData, boardParseData 를 이용한다.

이상 간단하게 XML파서를 이용하는 방법이다.




댓글 없음: