使用AFNetworkingparsingXML文件

我正在使用雅虎api做一个小天气的应用程序。 这个API给我一个XML文件。 我现在的问题是如何parsing这个文件? 这是我迄今为止的代码。

AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) { NSLog(@"success"); XMLParser.delegate = self; [XMLParser parse]; NSLog(@"xmlParser is %@",XMLParser); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) { NSLog(@"failure with error %@",error); }]; 

你可以在这里findXML文件。

希望有人能帮助我

如果您正在使用NSXMLParser来分析XML,则需要有一个实现NSXMLParserDelegate的类。 你可以使用你的ViewController来做到这一点:

 @interface ViewController : UIViewController <NSXMLParserDelegate> 

然后使用此协议提供的SAX方法,可以在运行[XMLParser parse]时parsing此XML。 这里是你的xml的一个例子:

 - (IBAction) makeRequest:(id)sender { NSLog(@"Making request"); NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://weather.yahooapis.com/forecastrss?w=2442047&u=c"]]; AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) { XMLParser.delegate = self; [XMLParser parse]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) { NSLog(@"failure with error %@",error); }]; [operation start]; } #pragma mark - Parsing lifecycle - (void)startTheParsingProcess:(NSData *)parserData { NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process [parser setDelegate:self]; [parser parse]; // starts the event-driven parsing operation. } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"yweather:astronomy"]) { NSLog(@"Sunrise: %@, Sunset: %@", [attributeDict valueForKey:@"sunrise"], [attributeDict valueForKey:@"sunset"]); } } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ self.tmpInnerTagText = string; // Make a temp NSString to store the text in-between tags } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"title"]) { NSLog(@"%@", self.tmpInnerTagText); } if ([elementName isEqualToString:@"description"]) { NSLog(@"%@", self.tmpInnerTagText); } } - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"Paser Error = %@", parseError); //TODO: Create Alert message error } 

另外为了让AFNetworking支持您正在使用的RSS XML,我必须添加“application / rss + xml”到可接受的内容types按照来自这个网站的指示: http : //www.suushmedia.com/simple-rss-reader-with -afnetworking /

希望这可以帮助

更好的解决scheme:我find了

 NSPropertyListFormat format; NSArray *myObjects = [NSPropertyListSerialization propertyListWithData:responseObject options:NSPropertyListMutableContainers format:&format error:NULL]; //If the root object of the plist is dictionary NSDictionary *myObjects = [NSPropertyListSerialization propertyListWithData:responseObject options:NSPropertyListMutableContainers format:&format error:NULL];