AFNetworking 2.0不解析xml

时间:2014-12-04 08:01:30

标签: ios xml afnetworking-2

我想阅读来自网络服务的回复。

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

但我只从Xcode日志中获得<NSXMLParser: 0x15d85490>。它不是正确的xml响应。

2 个答案:

答案 0 :(得分:2)

输出正确,在iOS上只有NSXMLParser是一个sax解析器,你需要实现sax解析。 块中返回的对象是NSXMLParser的实例,这是您在日志语句中看到的,对象是您解析从HTTP请求返回的数据。传递给自己的是NSXMLParserDelegate

如果你想要DOM解析,你可以使用ONO XML解析器,它由AFNetworking的开发人员和DOM解析器构成。 当然,与AFNetworkingAFOnoResponseSerializer

进行了很好的整合

答案 1 :(得分:1)

EN:因为responseObjectNSXMLParser个实例,所以您不能像字符串那样对待它! 您必须实现NSXMLParserDelegate来处理xml解析器进度!

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