iOS关于XML解析请求数据
XML数据的请求:
和json请求几乎一样,只有请求参数修改为xml即可:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/atom+xml", nil];
XML数据的解析:
对xml进行解析:
- <?xml version="1.0" encoding="UTF-8"?>
- <result>
- <meeting addr="203">
- <creator>张一</creator>
- <member>
- <name>张二</name>
- <age>20</age>
- </member>
- <member>
- <name>张三</name>
- <age>21</age>
- </member>
- <member>
- <name>张四</name>
- <age>22</age>
- </member>
- </meeting>
- <meeting addr="204">
- <creator>李一</creator>
- <member>
- <name>李二</name>
- <age>20</age>
- </member>
- <member>
- <name>李三</name>
- <age>21</age>
- </member>
- <member>
- <name>李四</name>
- <age>22</age>
- </member>
- </meeting>
- </result>
1.获取xml文件中的数据:存放到字符串中
- //bundle是一个目录,包含了程序会使用到的资源
- NSString *path=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
- NSString *_xmlContent=[[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
用NSXMLParser实现解析:
- NSXMLParser解析简要说明
- 1.是sax方法解析
- 2.需要创建NSXMLParser实例 (alloc)
- 并创建解析器 (initWithData:)
- 为解析器定义委托 (setDelegate:)
- 运行解析器 (parser)
- ++++++当parser初始化并执行parse语句时([parser parse]),程序会跳到代理方法里面走第一个代理方法++++++
- 3.这种解析方式是利用它的代理NSXMLParserDelegate实现的
- 第一个代理方法:开始处理xml数据,它会把整个xml遍历一遍,识别元素节点名称
- - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
- 第二个代理方法:也就是得到文本节点里存储的信息数据
- - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
- 第三个代理方法:存储从第二个代理方法中获取到的信息
- - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
- 这就是解析的过程,在这个过程中会不停的重复的执行这三个代理方法,直到遍历完成
- 另外:
- 解析开始执行的方法
- - (void)parserDidStartDocument:(NSXMLParser *)parser;
- 解析结束执行的方法
- - (void)parserDidEndDocument:(NSXMLParser *)parser;
- 当出现解析错误的时候,会执行这个方法
- - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;
解析开始:
2.准备工作:
- NSXMLParser *parse=[[NSXMLParser alloc] initWithData:[_xmlContent dataUsingEncoding:NSUTF8StringEncoding]];
- [parse setDelegate:self];
- [parse parse];
- [parse release];
3.三个代理方法具体实现:
- //第一个代理方法:
- - (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
- {
- //判断是否是meeting
- if ([elementName isEqualToString:@"meeting"]) {
- //判断属性节点
- if ([attributeDict objectForKey:@"addr"]) {
- //获取属性节点中的值
- NSString *addr=[attributeDict objectForKey:@"addr"];
- }
- }
- //判断member
- if ([elementName isEqualToString:@"member"]) {
- NSLog(@"member"]);
- }
- }
- //第二个代理方法:
- - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
- {
- //获取文本节点中的数据,因为下面的方法要保存这里获取的数据,所以要定义一个全局变量(可修改的字符串)
- //NSMutableString *element = [[NSMutableString alloc]init];
- //这里要赋值为空,目的是为了清空上一次的赋值
- [element setString:@""];
- [element appendString:string];//string是获取到的文本节点的值,只要是文本节点都会获取(包括换行),然后到下个方法中进行判断区分
- }
- //第三个代理方法:
- - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
- namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
- NSString *str=[[NSString alloc] initWithString:element];
- if ([elementName isEqualToString:@"creator"]) {
- NSLog(@"creator=%@",str);
- }
- if ([elementName isEqualToString:@"name"]) {
- NSLog(@"name=%@",str);
- }
- if ([elementName isEqualToString:@"age"]) {
- NSLog(@"age=%@",str);
- }
- [str release];
- }
解析xml数据的时候,
每当遇到元素节点的时候都会执行第一个代理方法,如果有属性节点,可以直接在这个方法中获取里面的值;
每当遇到文本节点的时候都会执行第二个代理方法,获取文本节点中的值然后到第三个方法中进行区分。
如果是换行符的话也会获取,因为换行符也是文本节点,不过当一个元素节点结束后的换行符是不会获取的。
比如说:(换行符1)<li>文本节点</li>(换行符2)
元素节点前后各有一个换行符,这时只会获取换行符1,而不会获取换行符2。
4.处理错误:打印错误
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
NSLog(@"%@",[parseError description]);
}
iOS关于XML解析请求数据的更多相关文章
- 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)
一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...
- iOS开发 XML解析和下拉刷新,上拉加载更多
iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...
- iOS平台XML解析类库对比和安装说明
在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...
- 【IOS】 XML解析和xml转plist文件(GDataXML)
iOS对于XML的解析有系统自带的SDK--NSXMLParser,鄙人愚拙,只会用GDataXML进行解析,这里仅介绍GData的使用.(以下图为例) 1.对于一个xml文件,先读取出来 NSDat ...
- iOS项目之模拟请求数据
如何在iOS开发中更好的做假数据? 当工期比较紧的时候,项目开发中会经常出现移动端等待后端接口数据的情形,不但耽误项目进度,更让人有种无奈的绝望.所以在开发中,我们常常自己做些假数据,以方便开发和UI ...
- iOS - OC - XML 解析 - NSXMLParser
//4.解析数据 //4.1 创建XML解析器:SAX NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data]; //4.2 设置代理 ...
- iOS开发XML解析
xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundat ...
- iOS开发-简单解析JSON数据
什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {“nam ...
- cocos2d-x 中XML解析与数据存储
一不小心就玩了一周的游戏了.哎.玩的时候时间过得总是这么快... 于是今天决定看一下之前不怎么非常熟悉的XML;(之前做游戏时数据的储存用到过XML,但这块是还有一个同事在做,所以不怎么熟悉), 看了 ...
随机推荐
- (原)3.1 Zookeeper应用 - Master选举
本文为原创文章,转载请注明出处,谢谢 Master 选举 1.原理 服务器争抢创建标志为Master的临时节点 服务器监听标志为Master的临时节点,当监测到节点删除事件后展开新的一轮争抢 某个服务 ...
- checkbox & radio 的对齐问题
不仅不同浏览器不同,不同的字体,不同的文字大小也会表现不一样. 重置 form checkbox & radio 因为不同浏览器解析不一样,有些是默认margin,有些是默认padding,还 ...
- 调用百度地图API
http://lbsyun.baidu.com/index.php?title=jspopular
- iOS 点击TextField不弹出软键盘的解决方案
开发中遇到: 在模拟器里面,textfield可以通过电脑键盘输入,可是怎么也不会自动弹出模拟器软键盘 解决方案: 切换一下键盘,command+shift+k,Xcode6.3 中只能是一种输入源
- Json解析,Json-lib
网络资源参考 http://www.json.org/json-zh.html http://code.alibabatech.com/wiki/pages/viewpage.action?pageI ...
- K 均值算法(K-means)
K-means算法是最简单的一种聚类算法.算法的目的是使各个样本与所在类均值的误差平方和达到最小(这也是评价K-means算法最后聚类效果的评价标准) K-means聚类算法的一般步骤: 1. 初始化 ...
- 自己实现苹果安装app动画
最近在学习CALayer相关动画,然后某一天突然发现苹果安装app这动画就很不错啊,所以就想自己实现下. 具体效果如图: 还是不试不知道一试吓一跳啊,这看上去简单的动画没我想象的那么简单. 首先这个动 ...
- iOS - 对OOA、OOD、OOP的理解
很多人在求职的时候,会遇到一个这样的问题:“对OOD/OOP有较深的理解”,这个时候有人就会问OOD.OOP是什么呢?那么今天咱们就一块来看一下OOA.OOD.OOP到底是什么! (一)OOA--面向 ...
- IOS开发基础知识--碎片32
1:动画属性UIViewAnimationOptions说明 a:常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子 ...
- 理解 iOS 的内存管理
远古时代的故事 那些经历过手工管理内存(MRC)时代的人们,一定对 iOS 开发中的内存管理记忆犹新.那个时候大约是 2010 年,国内 iOS 开发刚刚兴起,tinyfool 大叔的大名已经如雷贯耳 ...