2014-12-04 78 views
1

我想读取来自Web服务的响应。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); 
}]; 

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

回答

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

谢谢。我决定还是尽量用json吧,xml看起来好麻烦。 – 2014-12-04 14:31:55

2

输出正确,在iOS上只有NSXMLParser这是一个sax解析器,您将需要实现sax解析。 块中返回的对象是NSXMLParser的实例,这就是您在日志语句中看到的内容,其中的对象是解析从HTTP请求返回的数据的对象。通过它自我处理与NSXMLParserDelegate

如果你想要DOM解析,你可以使用ONO XML解析器,它是由AFNetworking的开发者制作的,它是一个DOM解析器。 当然也有很不错的整合与AFNetworkingAFOnoResponseSerializer

+0

谢谢。 ONO看起来像一个很好的XML解析器。 – 2014-12-04 14:51:30

+0

我只用过一次,我更喜欢JSON,但是它确实做到了您所期望的一切。包括XPath和与AFNetworking的完美集成。 – rckoenes 2014-12-04 14:55:50