前言:
http协定是服务器与客户端交换数据最常见的形式。一般来说,数据格式是JSON,也有XML的状况。JSON格局都会解析,如何解析XML呢? —— 本文是基于AFNetworking3.2.1版本
参考资料:
一般来说,咱们进行HTTP申请,会实例化一个AFHTTPSessionManager对象,并设置一些属性:
manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", @"text/plain",nil];
manager.requestSerializer.timeoutInterval = 30.0f;
复制代码
此处咱们没有设置manager的responseSerializer属性,responseSerializer默认类型是AFJSONResponseSerializer,很显著要进行申请XML格局的数据,不能应用AFJSONResponseSerializer。 以下是要害代码:
AFXMLParserResponseSerializer *response = [AFXMLParserResponseSerializer serializer];
manager.responseSerializer = response;
复制代码
网上有些说法是
AFJSONResponseSerializer *response = [AFJSONResponseSerializer serializer];
response.acceptableContentTypes = [NSSet setWithObjects:@"text/xml", nil];
manager.responseSerializer = response;
复制代码
这种用法是不对的!这里responseSerializer的类型必须是AFXMLParserResponseSerializer,至于为何会呈现这样的解决方案,可能是因为答者简略的看到谬误返回是“不能接管text/xml类型的数据”而猜想的答案,并没有加以验证;或者说,此办法在低版本的 AFNetworking 中能够应用。
用法如下
[manager GET:url parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"LenovoID 登录申请后果:%@",responseObject);
NSXMLParser *xmlparser = responseObject;
[xmlparser setDelegate:self];
[xmlparser parse];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"LenovoID 登录申请失败:%@", [error localizedDescription]);
}];
复制代码
要实现NSXMLParserDelegate协定 ps;iOS开发交流技术:欢迎你的加入,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长
#pragma mark - NSXMLParser delegate
- (void)parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"XML文档开始");
}
-(void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"XML文档完结");
}
- (void)parser:(NSXMLParser *)parser foundElementDeclarationWithName:(NSString *)elementName model:(NSString *)model{
NSLog(@"elementName:%@",elementName);
}
复制代码
参考资料中有指明NSXMLParser的用法:
AFNetworking是最根本的iOS开发技巧,此处就不给出具体实现的Demo了。XML 解析最重要的是设置AFHTTPSessionManager对象的responseSerializer属性值为AFXMLParserResponseSerializer对象。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END