Вся предпосылка, на которой я основывал свои оригинальные ответы, кажется неправильной. Если вы использовали следующий фрагмент,
for (CXMLElement *node in nodes) {
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
int counter;
for(counter = 0; counter < [node childCount]; counter++) {
// common procedure: dictionary with keys/values from XML node
[item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] name]];
}
[results addObject:item];
[item release];
}
для генерации вашего кода, чем потомки элемента social
, хранятся в виде строковых значений, и любые разумные средства для их извлечения теряются. Я бы посоветовал вам хранить узлы, а не создавать словарь. Вот пример извлечения рейтинга,
NSString * xmlString = @"<channel> <item> <title> </title> <social> <views> <total_views>2</total_views> </views> <reviews> <average_rating>2</average_rating> </reviews> </social> </item> </channel>";
CXMLDocument * xmlDocument = [[[CXMLDocument alloc] initWithXMLString:xmlString options:0 error:nil] autorelease];
NSArray * nodes = [xmlDocument nodesForXPath:@"//item" error:nil];
for (CXMLElement * node in nodes) {
NSString * title = [[node nodeForXPath:@"title" error:nil] stringValue];
NSString * average_rating = [[node nodeForXPath:@"social/reviews/average_rating" error:nil] stringValue] ;
NSLog(@"%@", title);
NSLog(@"%@", average_rating);
}