티스토리 뷰
참고 사이트
아이폰 개발센터 의 Introduction to Event-Driven XML Programming Guide for Cocoa 와
블로그 http://cocoadev.tistory.com/245 를 참고 하였습니다.
1. 접속
대상 XML (NSString 타입)의 주소를 인자로 NSURL 을 생성한다.
NSXMLParser 오브젝트를 수신된 url을 인자로 초기화 한다.
2. delegate 초기화
initXMLParser 로 Delegate 를 초기화 해준다.
3. Set delegate
delegate를 지정하고 XML 파일을 파싱한다. parse 메소드로 파싱이 시작된다. 각 단계별로 delegate된 메소드를 구현하여 직접 처리해줘야 한다.
4. Delegate 메소드 구현
NSXMLParser의 많은 delegate 중에 필수적으로 구현되어야 할 메소드는
parser:didStartElement, parser:foundCharacters, parse:didEndElement 이다.
1) parser:didStartElement 메소드 (시작 메소드) 구현
두번째 인자인 elementName 으로 해당 요소의 이름이 전달된다. 세번째와 네번째 인자는 네임스페이스와 관련된 URI 와 전체 이름이 전달된다.
마지막 인자인 attributeDict 에는 해당 요소의 속성들이 전달된다.
Books 가 전달되면 array 를 초기화하고, Book 이 전달 되면 Book 객체를 초기화 하고 요소들을 뽑아내서 출력하게 된다.
2) parser:foundCharacters 메소드 (데이터 저장 메소드) 의 구현
토큰 별로 넘어오는 문자열을 currentElement요소의 위치에 저장한다.
3) parser:didEndElement 메소드 (종료 메소드) 구현
한 요소가 끝날때 호출되는데, aBook 객체의 elementName에 currentElementValue를 저장하고 모두 끝났을 때에 메모리를 반납해준다.
www.iPhoneSDKArticles.com 의 XML 관련 예제 소스를 첨부했으니 참고 하세요~
아이폰 개발센터 의 Introduction to Event-Driven XML Programming Guide for Cocoa 와
블로그 http://cocoadev.tistory.com/245 를 참고 하였습니다.
1. 접속
NSURL *url = [[NSURL alloc] initWithString:@"http://sites.google.com/site/iphonesdktutorials/xml/Books.xml"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
대상 XML (NSString 타입)의 주소를 인자로 NSURL 을 생성한다.
NSXMLParser 오브젝트를 수신된 url을 인자로 초기화 한다.
2. delegate 초기화
XMLParser *parser = [[XMLParser alloc] initXMLParser];
initXMLParser 로 Delegate 를 초기화 해준다.
3. Set delegate
[xmlParser setDelegate:parser];
[xmlParser parse];
[xmlParser parse];
delegate를 지정하고 XML 파일을 파싱한다. parse 메소드로 파싱이 시작된다. 각 단계별로 delegate된 메소드를 구현하여 직접 처리해줘야 한다.
4. Delegate 메소드 구현
NSXMLParser의 많은 delegate 중에 필수적으로 구현되어야 할 메소드는
parser:didStartElement, parser:foundCharacters, parse:didEndElement 이다.
1) parser:didStartElement 메소드 (시작 메소드) 구현
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"Books"]) {
//Initialize the array.
appDelegate.books = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"Book"]) {
//Initialize the book.
aBook = [[Book alloc] init];
//Extract the attribute here.
aBook.bookID = [[attributeDict objectForKey:@"id"] integerValue];
NSLog(@"Reading id value :%i", aBook.bookID);
}
NSLog(@"Processing Element: %@", elementName);
}
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"Books"]) {
//Initialize the array.
appDelegate.books = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"Book"]) {
//Initialize the book.
aBook = [[Book alloc] init];
//Extract the attribute here.
aBook.bookID = [[attributeDict objectForKey:@"id"] integerValue];
NSLog(@"Reading id value :%i", aBook.bookID);
}
NSLog(@"Processing Element: %@", elementName);
}
두번째 인자인 elementName 으로 해당 요소의 이름이 전달된다. 세번째와 네번째 인자는 네임스페이스와 관련된 URI 와 전체 이름이 전달된다.
마지막 인자인 attributeDict 에는 해당 요소의 속성들이 전달된다.
Books 가 전달되면 array 를 초기화하고, Book 이 전달 되면 Book 객체를 초기화 하고 요소들을 뽑아내서 출력하게 된다.
2) parser:foundCharacters 메소드 (데이터 저장 메소드) 의 구현
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentElementValue)
currentElementValue = [[NSMutableString alloc] initWithString:string];
else
[currentElementValue appendString:string];
NSLog(@"Processing Value: %@", currentElementValue);
}
if(!currentElementValue)
currentElementValue = [[NSMutableString alloc] initWithString:string];
else
[currentElementValue appendString:string];
NSLog(@"Processing Value: %@", currentElementValue);
}
토큰 별로 넘어오는 문자열을 currentElement요소의 위치에 저장한다.
3) parser:didEndElement 메소드 (종료 메소드) 구현
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"Books"])
return;
//There is nothing to do if we encounter the Books element here.
//If we encounter the Book element howevere, we want to add the book object to the array
// and release the object.
if([elementName isEqualToString:@"Book"]) {
[appDelegate.books addObject:aBook];
[aBook release];
aBook = nil;
}
else
[aBook setValue:currentElementValue forKey:elementName];
[currentElementValue release];
currentElementValue = nil;
}
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"Books"])
return;
//There is nothing to do if we encounter the Books element here.
//If we encounter the Book element howevere, we want to add the book object to the array
// and release the object.
if([elementName isEqualToString:@"Book"]) {
[appDelegate.books addObject:aBook];
[aBook release];
aBook = nil;
}
else
[aBook setValue:currentElementValue forKey:elementName];
[currentElementValue release];
currentElementValue = nil;
}
한 요소가 끝날때 호출되는데, aBook 객체의 elementName에 currentElementValue를 저장하고 모두 끝났을 때에 메모리를 반납해준다.
www.iPhoneSDKArticles.com 의 XML 관련 예제 소스를 첨부했으니 참고 하세요~
'나름 프로그래밍? > Objective-C' 카테고리의 다른 글
post 방식 예제 (1) | 2010.02.23 |
---|---|
Xcode에서 SCM 설정하기 (0) | 2010.02.22 |
하이브리드 아이폰 애플리케이션 개발 (0) | 2010.02.19 |
iPhone SDK 에서 계산기 만들기 (2) | 2010.02.17 |
프로퍼트 리스트 기록, 읽기 (0) | 2010.02.11 |