2014-12-04 6 views
1

Я хочу прочитать ответ веб-службы.AFNetworking 2.0 не разобрать xml

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer=[AFXMLParserResponseSerializer new]; 
[manager GET:@"http://openapi.aibang.com/search?app_key=f41c8afccc586de03a99c86097e98ccb&city=%E5%8C%97%E4%BA%AC&q=%E9%A4%90%E9%A6%86" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"%@",responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

Но я получил только <NSXMLParser: 0x15d85490> из журнала Xcode. Это неправильный ответ xml.

ответ

1

EN: Поскольку responseObject является NSXMLParser экземпляр, вы не можете рассматривать его как строку! Вы должны реализовать NSXMLParserDelegate обработчику xml parser progress!

CN: responseObject 返回 的 是 NSXMLParser 实例, 你 必须 实现 NSXMLParserDelegate 协议 才能 处理 该 xml 字符串! 骚 年! :-)

раствор 1: использовать NSXMLParser для парсера

[manager GET:@"http://openapi.aibang.com/search?app_key=f41c8afccc586de03a99c86097e98ccb&city=%E5%8C%97%E4%BA%AC&q=%E9%A4%90%E9%A6%86" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSXMLParser *XMLParser = (NSXMLParser *)responseObject; 
    [XMLParser setShouldProcessNamespaces:YES]; 
    XMLParser.delegate = self; 
    [XMLParser parse]; 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

раствор 2: использовать GDataXML для синтаксического анализа (гораздо проще)

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager GET:@"http://openapi.aibang.com/search?app_key=f41c8afccc586de03a99c86097e98ccb&city=%E5%8C%97%E4%BA%AC&q=%E9%A4%90%E9%A6%86" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:responseObject encoding:0 error:nil]; 
    NSLog(@"%@",doc.rootElement); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
+0

谢谢. 我 决定 还是 尽量 用 json 吧, xml 看起来 好 麻烦. –

2

Выход правильный, на iOS есть только NSXMLParser, который является парсером сакса, и вам нужно будет реализовать синтаксический анализ сакса. Объект, возвращенный в блоке, представляет собой экземпляр NSXMLParser, и это то, что вы видите в своем операторе журнала, с объектом, который вы анализируете данные, возвращаемые из HTTP-запроса. Передача его осуществляется с помощью NSXMLParserDelegate.

Если вы хотите разбор DOM, вы можете использовать парсер ONO XML, он составлен разработчиками AFNetworking и это DOM Parser. И, конечно, хорошая интеграция с AFNetworking: AFOnoResponseSerializer

+0

Спасибо. ONO выглядит как хороший синтаксический анализатор XML. –

+0

Я использовал его только один раз, я предпочитаю JSON, но да, он сделал все, что вы ожидали. Включая XPath и совершенную интеграцию с AFNetworking. – rckoenes

Смежные вопросы