服务器返回的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数据相关推荐

  1. Java解析接口返回的xml数据

    Java解析接口返回的xml数据 前言 实例 前言    前一段时间,博主在工作遇到了一个小问题,就是调用一个接口后,它的返回值并不是常见的JSON字符串格式,而是返回给你一个xml格式的数据,所有的 ...

  2. ajaxfileupload 返回值_ajaxFileUpload上传文件成功后却无法解析服务器返回的json数据...

    ajaxFileUpload是一款很好用的文件上传插件,网上也有很多关于它的版本,但在上传文件成功后想返回json数据给前台时,却会出现无法解析json数据的情况. 仔细调试发现其实在向服务器提交数据 ...

  3. WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据

    贴图  知乎:显著提升程序员身心健康和工作效率的装备有哪些? 笔记本:  1.银河舰队 PAVILION 15-bc011TX光暗影精灵2  2.顽石 -FL5900U7500超薄i7(性价比最高) ...

  4. HttpClient解析服务器返回的response出现乱码

    引用处: [问题解决]HttpClient解析服务器返回的response出现乱码 问题场景 最近在用httpClient做网络爬虫的时候,遇到了一个不大不小的问题,当使用HttpGet向指定网址发送 ...

  5. JS前端取得并解析后台服务器返回的JSON数据的方法

    摘要:主要介绍:使用eval函数解析JSON数据:$.getJSON()方法获得服务器返回的JSON数据 JavaScript eval() 函数 eval(string) 函数可计算某个字符串,并执 ...

  6. AJAX 学习笔记[四] AJAX 对服务器返回的XML 的处理

    在AJAX 中,服务器端如果返回的XML 文档,则可以通过异步对象的responseXML 属性来获取器XML 数据.而开发者可以利用DOM 的相关方法对其进行处理. 假设服务器返回的XML 文档,如 ...

  7. 解析ajax返回的json数据

    问题描述 最近在开发一个音乐小网站的时候,因为返回的数据是多重数组对象(即数组里面嵌套数组),所以不知道如何解析api返回的json数据.返回的json数据格式如下: json总体结构如下: json ...

  8. 静态Web服务器-返回固定页面数据

    1. 开发自己的静态Web服务器 实现步骤: 编写一个TCP服务端程序 获取浏览器发送的http请求报文数据 读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器. HTTP响应报文数据 ...

  9. jqgrid 服务器端验证,jqGrid获取服务服务器返回的所有数据

    当jqGrid配置的rowNum小于服务器返回的总数据量(records属性记录总数据),调用getRowData方法获取到的只是显示的部分内容,而非服务器返回的所有数据行. 要想获取jqGrid返回 ...

最新文章

  1. Navicat通过跳板机连接数据库
  2. fatal error C1900: Il mismatch between 'P1' version '20060201' and 'P2' version '20050411'
  3. AVCaptureMovieFileOutput 视频方向(锁定竖屏or不锁定都可以)
  4. 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告.doc...
  5. [SuperM]Shell编程课堂笔记+PPT总结
  6. Android牟利之道(一)--界面嵌入有米广告
  7. 深度学习(八)——fine-tuning, 李飞飞
  8. bash 将二进制转换为十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...
  9. java第二季_Java入门第二季
  10. ajax post form表单提交中文乱码,ajax XMLHTTP Post Form时的表单乱码综合解决
  11. HALCON示例程序IC.hdev通过电路板元器件定位识别
  12. sentinel卫星_【Sentinel-2】(1):哨兵2号数据下载与显示
  13. 文字转语音真人发声免费的有哪些?文字转语音有这两款软件就够了
  14. WIFI实践入门--基本命令--iwconfig
  15. 国内财务软件公司排名
  16. MADRL(多智能体深度强化学习)
  17. sql2000安装失败的解决方法
  18. win7桌面图标箭头怎么去掉
  19. uoj 30 tourists
  20. MCS51 数据存储器(RAM)

热门文章

  1. 图文并茂,傻瓜都能看懂的 JVM 内存布局
  2. windows 修改hosts 立即生效的方法
  3. 挑战 10 个最难回答的 Java 问题(附答案)
  4. 996和被辞退,二选一
  5. Java 洛谷 P1149 火柴棒等式
  6. python设置坐标轴刻度值字体大小_python 设置xlabel,ylabel 坐标轴字体大小,字体类型...
  7. 医院计算机网络安全宣教,医院网络安全及解决方案
  8. 数据中心管理人员预计2018年发生的变化
  9. string替换_GEE数据类型—String,Number
  10. 成功解决Exception “unhandled ModuleNotFoundError“No module named ‘face_recognition.cli‘