在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标签, 创建一个模型
 84
 85         if (self.itemDict != nil && self.itemArray != nil) {
 86             [self.itemArray addObject:self.itemDict];
 87             [self.items addObject:self.itemArray];
 88             SPLog(@"%@", self.itemDict);
 89         }
 90
 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;
106
107 }
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时,这句话不写,会报错。

在AFN中使用NSXMLParser解析服务器返回的XML数据

时间: 2024-10-25 01:42:22

在AFN中使用NSXMLParser解析服务器返回的XML数据的相关文章

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

Webservice传递的数据只能是序列化的数据,典型的就是xml数据.   /// <summary>         /// 通过用户名和密码 返回下行数据         /// </summary>         /// <param name="UserName">用户名</param>         /// <param name="UserPwd">密码</param>    

ajaxFileUpload上传文件成功后却无法解析服务器返回的json数据

ajaxFileUpload是一款很好用的文件上传插件,网上也有很多关于它的版本,但在上传文件成功后想返回json数据给前台时,却会出现无法解析json数据的情况. 仔细调试发现其实在向服务器提交数据后,是进入了success回调函数的,只是没有解析到json数据.那就说明服务器做出了响应的,进入了success方法的,唯一的问题就是前台接受的数据不是json格式的. 使用console.log输出data发现并不是纯粹的json数据,其中头部多了<pre style="word-wrap

WebLoad 解析服务器返回的XML格式内容

Parsing the XML Response get the root node:  var rootNode = document.wlXmls[0].XMLDocument.documentElement get the root node's name : rootNode.nodeName get the root node's first child:  var fisrtChild = rootNode.childNodes.item(0) Note: the text of a

手把手教你SOAP访问webservice并DOM解析返回的XML数据(转)

http://blog.csdn.net/u012534831/article/details/51357111 前言: 目前我们项目组还在采用webservice这种http方式,并且某些网站服务提供的对外接口还在采用webservice方式,因此就总结了一下写了这篇文章. 以soap1.2的请求为例,在例子里我们传进去用户名和密码给服务,服务返回一个xml数据. 首先我们来开一下soap1.2的request, //wsdl,例:OrderApp.asmx POST /******App.a

手把手教你SOAP访问webservice并DOM解析返回的XML数据

前言: 目前我们项目组还在采用webservice这种http方式,并且某些网站服务提供的对外接口还在采用webservice方式,因此就总结了一下写了这篇文章. 以soap1.2的请求为例,在例子里我们传进去用户名和密码给服务,服务返回一个xml数据. 首先我们来开一下soap1.2的request, //wsdl,例:OrderApp.asmx POST /******App.asmx HTTP/1.1 //这儿填写服务地址 Host: 100.100.100.100 Content-Typ

使用getJSON()异步请求服务器返回json格式数据

我们可以使用jquery的getJSON()方法请求服务器返回json格式数据: js代码: function test(){ $.getJSON("JsonServlet",function(result){ alert(result.name); }); } 服务器端servlet响应: @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletEx

WebLoad 解析服务器返回的JSON格式内容

服务器返回Json格式的响应内容经常是以 String (txt) 形式返回给客户端.客户端需要把 文本形式的内容还原为Json格式以进一步做处理(如,取得返回内容的一个值作为下个请求的一个输入).这就要用到 一个函数 evel(). 具体做法如下: Parsing the JSON Response 1. In the InitAgenda() function in the Agenda, define the global variable values of the SaveSource

iOS SDK中使用NSXMLParser解析XML(iphone网络篇三)

iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档.NSXMLParser在处理XML文档的过程中当遇到一些要素(元素.属性.CDATA块.评论等)时会通知它的委托,而自身不对解析的要素进行任何处理,全权委托给NSXMLParserDelegate处理.同时它也会报告错误. 1. 打开一个xml文件,读取内容到NSData中. NSString *path = [[NSBundle mainBundle] pathForResource:@

javascript 解析ajax返回的xml和json格式的数据

写个例子,以备后用 一.JavaScript 解析返回的xml格式的数据: 1.javascript版本的ajax发送请求 (1).创建XMLHttpRequest对象,这个对象就是ajax请求的核心,是ajax请求和响应的信息载体,单是不同浏览器创建方式不同 (2).请求路径 (3).使用open方法绑定发送请求 (4).使用send() 方法发送请求 (5).获取服务器返回的字符串   xmlhttpRequest.responseText; (6).获取服务端返回的值,以xml对象的形式存