Analyser un file XML avec AFNetworking

Je fais une petite application météo en utilisant l'API Yahoo. Cette API me redonne un file XML. Mon problème est maintenant comment je peux parsingr ce file? Voici mon code que j'ai jusqu'ici.

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); }]; 

Vous pouvez find le file XML ici .

J'espère que tout le monde peut m'aider

Si vous cherchez à parsingr XML en utilisant NSXMLParser, vous aurez besoin d'une class qui implémente NSXMLParserDelegate. Vous pouvez utiliser votre ViewController pour ceci:

 @interface ViewController : UIViewController <NSXMLParserDelegate> 

Puis, en utilisant les methods SAX fournies par ce protocole, vous pouvez parsingr ce [XMLParser parse] XML lorsque vous exécutez [XMLParser parse] . Voici un exemple pour votre file XML:

 - (IBAction) makeRequest:(id)sender { NSLog(@"Making request"); NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithSsortingng:@"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:(NSSsortingng *)elementName namespaceURI:(NSSsortingng *)namespaceURI qualifiedName:(NSSsortingng *)qualifiedName atsortingbutes:(NSDictionary *)atsortingbuteDict { if ([elementName isEqualToSsortingng:@"yweather:astronomy"]) { NSLog(@"Sunrise: %@, Sunset: %@", [atsortingbuteDict valueForKey:@"sunrise"], [atsortingbuteDict valueForKey:@"sunset"]); } } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSSsortingng *)ssortingng{ self.tmpInnerTagText = ssortingng; // Make a temp NSSsortingng to store the text in-between tags } - (void)parser:(NSXMLParser *)parser didEndElement:(NSSsortingng *)elementName namespaceURI:(NSSsortingng *)namespaceURI qualifiedName:(NSSsortingng *)qName { if ([elementName isEqualToSsortingng:@"title"]) { NSLog(@"%@", self.tmpInnerTagText); } if ([elementName isEqualToSsortingng:@"description"]) { NSLog(@"%@", self.tmpInnerTagText); } } - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"Paser Error = %@", parseError); //TODO: Create Alert message error } 

Aussi pour get AFNetworking pour soutenir le RSS xml que vous utilisez, j'ai dû append "application / rss + xml" aux acceptableContentTypes en suivant les instructions de ce site: http://www.suushmedia.com/simple-rss-reader-with -afnetworking /

J'espère que cela t'aides

Meilleure solution: J'ai trouvé ici

 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];