在AFN中使用NSXMLParser解析服务器返回的XML数据
服务器返回的XML格式:
因为苹果没有提供直接获取xml开始标签和结束标签中间的字符串,虽然提供了
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string这个方法获取中间的字符串,但是这个字符串包含了空格和回车,所以要在这个方法中进行过滤。
源代码如下:
8 9 #import "RecommendController.h" 11 #import "SPHTTPRequestTool.h" 13 #import "UIImageView+WebCache.h" 14 @interface RecommendController ()<NSXMLParserDelegate> 15 16 @property (nonatomic, strong)NSMutableArray *items; 17 18 @property (nonatomic, strong)NSMutableDictionary *itemDict; 19 20 @property (nonatomic, strong)NSMutableArray *itemArray; 21 22 @property (nonatomic, copy)NSString *itemName; // 记录标签名 23 24 @end 25 26 @implementation RecommendController 37 - (void)viewDidLoad 38 { 39 [super viewDidLoad]; 46 [self loadNewRecommend]; 47 self.tableView.delegate = self; 48 self.tableView.dataSource = self; 49 } 50 51 - (void)loadNewRecommend 52 { 53 54 NSDictionary *dict = [NSDictionary dictionary]; 55 [SPHTTPRequestTool GET:@"http://jackgo.cn/jackgo/lab/v1.3/getitems.php?refresh=1&&earliest=(null)" params:dict success:^(NSXMLParser *parser) { 56 // 2.设置代理 57 parser.delegate = self; 58 59 // 3.开始解析 60 [parser parse]; // 卡住(解析完毕才会返回) 61 62 [self.tableView reloadData]; 63 } failure:^(NSError *error) { 64 SPLog(@"%@",error); 65 }]; 66 67 } 68 69 - (void)parserDidStartDocument:(NSXMLParser *)parser 70 { 71 SPLog(@"parser = %@", parser); 72 } 73 74 75 /** 76 * 解析到一个元素的开头时调用 <items> 77 */ 78 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 79 { 80 81 if ([@"items" isEqualToString:elementName]) { // 解析到一个items标签 82 self.items = [NSMutableArray array]; 83 } else if ([@"item" isEqualToString:elementName]) { // 解析到一个item标签, 创建一个模型 93 self.itemArray = [NSMutableArray array]; 94 self.itemDict = [NSMutableDictionary dictionary]; 95 }else 96 self.itemName = elementName; 97 } 98 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 99 { 100 if([string isEqualToString:@"\n"] || [string isEqualToString:@" "] || [string isEqualToString:@"\n\n"]) return; 105 self.itemDict[self.itemName] = string; 107 }
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {if (self.itemDict != nil && self.itemArray != nil && [self.secondElement isEqualToString:elementName]) {[self.itemArray addObject:self.itemDict];[self.items addObject:self.itemArray];SPLog(@"%@", self.itemDict);}}
123 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 124 { 125 #warning Potentially incomplete method implementation. 126 127 return 1; 128 } 129 130 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 131 {135 return self.items.count; 136 } 137 138 139 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 140 {142 UITableViewCell *cell = [[UITableViewCell alloc] init]; 147 NSArray *array = self.items[indexPath.row]; 148 NSDictionary *dict = [array lastObject]; 149 cell.textLabel.text = dict[@"intro"]; 150 cell.textLabel.numberOfLines = 0; 151 [cell.imageView setImageWithURL:dict[@"picurl"] placeholderImage:[UIImage imageNamed:@"error"]]; 152 / 153 return cell; 154 } 155 156 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 157 { 158 return 70; 159 } 210 211 @end
如果报错:可能原因
使用AFN解析时,
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; // 返回XML时,这句话不写,会报错。
转载于:https://www.cnblogs.com/Fc-ios/p/3889569.html
在AFN中使用NSXMLParser解析服务器返回的XML数据相关推荐
- Java解析接口返回的xml数据
Java解析接口返回的xml数据 前言 实例 前言 前一段时间,博主在工作遇到了一个小问题,就是调用一个接口后,它的返回值并不是常见的JSON字符串格式,而是返回给你一个xml格式的数据,所有的 ...
- ajaxfileupload 返回值_ajaxFileUpload上传文件成功后却无法解析服务器返回的json数据...
ajaxFileUpload是一款很好用的文件上传插件,网上也有很多关于它的版本,但在上传文件成功后想返回json数据给前台时,却会出现无法解析json数据的情况. 仔细调试发现其实在向服务器提交数据 ...
- WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据
贴图 知乎:显著提升程序员身心健康和工作效率的装备有哪些? 笔记本: 1.银河舰队 PAVILION 15-bc011TX光暗影精灵2 2.顽石 -FL5900U7500超薄i7(性价比最高) ...
- HttpClient解析服务器返回的response出现乱码
引用处: [问题解决]HttpClient解析服务器返回的response出现乱码 问题场景 最近在用httpClient做网络爬虫的时候,遇到了一个不大不小的问题,当使用HttpGet向指定网址发送 ...
- JS前端取得并解析后台服务器返回的JSON数据的方法
摘要:主要介绍:使用eval函数解析JSON数据:$.getJSON()方法获得服务器返回的JSON数据 JavaScript eval() 函数 eval(string) 函数可计算某个字符串,并执 ...
- AJAX 学习笔记[四] AJAX 对服务器返回的XML 的处理
在AJAX 中,服务器端如果返回的XML 文档,则可以通过异步对象的responseXML 属性来获取器XML 数据.而开发者可以利用DOM 的相关方法对其进行处理. 假设服务器返回的XML 文档,如 ...
- 解析ajax返回的json数据
问题描述 最近在开发一个音乐小网站的时候,因为返回的数据是多重数组对象(即数组里面嵌套数组),所以不知道如何解析api返回的json数据.返回的json数据格式如下: json总体结构如下: json ...
- 静态Web服务器-返回固定页面数据
1. 开发自己的静态Web服务器 实现步骤: 编写一个TCP服务端程序 获取浏览器发送的http请求报文数据 读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器. HTTP响应报文数据 ...
- jqgrid 服务器端验证,jqGrid获取服务服务器返回的所有数据
当jqGrid配置的rowNum小于服务器返回的总数据量(records属性记录总数据),调用getRowData方法获取到的只是显示的部分内容,而非服务器返回的所有数据行. 要想获取jqGrid返回 ...
最新文章
- Navicat通过跳板机连接数据库
- fatal error C1900: Il mismatch between 'P1' version '20060201' and 'P2' version '20050411'
- AVCaptureMovieFileOutput 视频方向(锁定竖屏or不锁定都可以)
- 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告.doc...
- [SuperM]Shell编程课堂笔记+PPT总结
- Android牟利之道(一)--界面嵌入有米广告
- 深度学习(八)——fine-tuning, 李飞飞
- bash 将二进制转换为十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...
- java第二季_Java入门第二季
- ajax post form表单提交中文乱码,ajax XMLHTTP Post Form时的表单乱码综合解决
- HALCON示例程序IC.hdev通过电路板元器件定位识别
- sentinel卫星_【Sentinel-2】(1):哨兵2号数据下载与显示
- 文字转语音真人发声免费的有哪些?文字转语音有这两款软件就够了
- WIFI实践入门--基本命令--iwconfig
- 国内财务软件公司排名
- MADRL(多智能体深度强化学习)
- sql2000安装失败的解决方法
- win7桌面图标箭头怎么去掉
- uoj 30 tourists
- MCS51 数据存储器(RAM)
热门文章
- 图文并茂,傻瓜都能看懂的 JVM 内存布局
- windows 修改hosts 立即生效的方法
- 挑战 10 个最难回答的 Java 问题(附答案)
- 996和被辞退,二选一
- Java 洛谷 P1149 火柴棒等式
- python设置坐标轴刻度值字体大小_python 设置xlabel,ylabel 坐标轴字体大小,字体类型...
- 医院计算机网络安全宣教,医院网络安全及解决方案
- 数据中心管理人员预计2018年发生的变化
- string替换_GEE数据类型—String,Number
- 成功解决Exception “unhandled ModuleNotFoundError“No module named ‘face_recognition.cli‘