[iphone 초급] IOS 자체 NSXMLparser 가 xml 파일 에 대한 분석
197131 단어 iosxmliPhoneClassDictionaryattributes
우리 가 분석 하고 자 하 는 파일 은 다음 과 같다.
<?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 가 습관 이 되 어 너무 일찍 풀 려 서 늘 가 치 를 얻 지 못 한다.허허, 명심 해라.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.