[iphone 초급] IOS 자체 NSXMLparser 가 xml 파일 에 대한 분석

많은 사람들 이 제3자 로 xml 파일 을 분석 하 는 것 을 알 고 있 습 니 다. IOS 가 자체 적 으로 가지 고 있 는 NSXMLparser 를 이용 하여 xml 분석 을 하 는 방법 을 소개 합 니 다.
우리 가 분석 하고 자 하 는 파일 은 다음 과 같다.
<?xml version="1.0" ?>
<theresponse>
 <status>OK</status>
 <pricing currency="USD" symbol="$">
   <price class="items">24.00</price>
   <price class="shipping">6.00</price>
   <price class="tax">1.57</price>
 </pricing>
</theresponse>

NSXMLparser 를 이용 하여 분석 해 야 할 클래스 에 NSXMLparser Delegate 를 추가 해 야 합 니 다. 그 중에서 세 가지 중요 한 방법 이 있 습 니 다. 하 나 는...
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

이 방법 은 시작 요 소 를 찾 는 것 입 니 다. 예 를 들 어 < status > 를 분석 하려 면 element Name 에서 status 로 찾 을 수 있 습 니 다.
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

이 방법 은 중간 값 < status > OK < / status > 를 해석 합 니 다. 여기 OK 가 여기 값 입 니 다.
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

마지막 방법 은 < / status > 이 노드 를 찾 는 것 입 니 다. 이 노드 에서 우 리 는 우리 가 분석 한 데 이 터 를 NSDictionary 나 NSArray 에 저장 할 수 있 습 니 다.
코드 를 한번 볼 게 요.
ItemParser.h
#import <Foundation/Foundation.h> @interface ItemParser : NSXMLParser <NSXMLParserDelegate> @property (readonly) NSDictionary *itemData; @end 

ItemParser.m
#import "ItemParser.h" @implementation ItemParser {     NSMutableDictionary *_itemData;     NSMutableDictionary *_attributesByElement;     NSMutableString *_elementString; } -(NSDictionary *)itemData{     return [_itemData copy]; } -(void)parserDidStartDocument:(NSXMLParser *)parser{     _itemData = [[NSMutableDictionary alloc] init];     _attributesByElement = [[NSMutableDictionary alloc] init];     _elementString = [[NSMutableString alloc] init]; } -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{     // Save the attributes for later.     if (attributeDict) [_attributesByElement setObject:attributeDict forKey:elementName];     // Make sure the elementString is blank and ready to find characters     [_elementString setString:@""]; } -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{     // Save foundCharacters for later     [_elementString appendString:string]; } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{     if ([elementName isEqualToString:@"status"]){         // Element status only contains a string i.e. "OK"         // Simply set a copy of the element value string in the itemData dictionary         [_itemData setObject:[_elementString copy] forKey:elementName];     } else if ([elementName isEqualToString:@"pricing"]) {         // Pricing has an interesting attributes dictionary          // So copy the entries to the item data         NSDictionary *attributes = [_attributesByElement objectForKey:@"pricing"];         [_itemData addEntriesFromDictionary:attributes];     } else if ([elementName isEqualToString:@"price"]) {         // The element price occurs multiple times.         // The meaningful designation occurs in the "class" attribute.         NSString *class = [[_attributesByElement objectForKey:elementName] objectForKey:@"class"];         if (class) [_itemData setObject:[_elementString copy] forKey:class];     }     [_attributesByElement removeObjectForKey:elementName];     [_elementString setString:@""]; } -(void)parserDidEndDocument:(NSXMLParser *)parser{     _attributesByElement = nil;     _elementString = nil; } -(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{     NSLog(@"%@ with error %@",NSStringFromSelector(_cmd),parseError.localizedDescription); } -(BOOL)parse{     self.delegate = self;     return [super parse]; } @end

여기 서 분석 한 결과:
{     currency = USD;     items = "24.00";     shipping = "6.00";     status = OK;     symbol = "$";     tax = "1.57"; }

자, 해석 이 끝 났 습 니 다. 여기 또 하나의 중점 은 copy 입 니 다. 여러분 들 이 모든 변수의 기 수 를 주의 하 시기 바 랍 니 다.나 자신 도 JAVA 가 습관 이 되 어 너무 일찍 풀 려 서 늘 가 치 를 얻 지 못 한다.허허, 명심 해라.

좋은 웹페이지 즐겨찾기