본문 바로가기

Programming/iOS

[ios] XML 파서 이용하기

반응형
공공 데이터 API 중에는 XML로 제공되는 데이터들이 많습니다.
ios에서 기본으로 제공하고, 사용법은 간단합니다.

1. URL 객체를 생성하고, url를 입력합니다.
test URL는 동물보호관리시스템 유기동물 조회 서비스를 이용하겠습니다.
https://www.data.go.kr/dataset/15001096/openapi.do



NSURL *url = [[NSURL alloc] initWithString:@"http://openapi.animal.go.kr/openapi/service/rest/abandonmentPublicSrvc/abandonmentPublic?ServiceKey={{ServiceKey}}&bgnde=20140601&endde=20171210&upkind=417000&kind=000018&pageNo=1&numOfRows=10"];

2. URL 객체를 사용하여 XML 파서를 생성하고 델리케이트를 연결해줍니다.
@interface에 NSXMLParserDelegate를 등록합니다.


   NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    xmlParser.delegate =self;


3. 파싱을 실행합니다.

   [xmlParser parse];

4. NSXMLParserDelegate 핸드러는 다음과 같습니다

- (void)parserDidStartDocument:(NSXMLParser *)parser;
파싱을 시작했을때 호출되는 함수 입니다.

- (void)parserDidEndDocument:(NSXMLParser *)parser;
파싱을 종료했을떄 호출되는 함수 입니다.


---------------------------------------------------------------------------

이외에도  git에서 XmlReader를 다운받아 사용하면 더 편하게 사용할 수 있습니다.
https://github.com/rahulnadella/XmlReader/tree/master/XmlReader

XMLReader.h는 아래와 같이 구성되어있으며

@interface XMLReader : NSObject <NSXMLParserDelegate>
{
    NSMutableArray *dictionaryStack;
    NSMutableString *textInProgress;
    NSError *errorPointer;
}

+ (NSDictionary *)dictionaryForXMLData:(NSData *)data error:(NSError **)errorPointer;
+ (NSDictionary *)dictionaryForXMLString:(NSString *)string error:(NSError **)errorPointer;


url객체로 호출한 응답 객체를 아래와 같이 받아서 파싱할수 있습니다.

NSDictionary *dic =[XMLReader dictionaryForXMLData:data error:nil];
                                          
NSDictionary *responseDic =[[dic objectForKey:@"data"] objectForKey:@"response"];
                                          


@end