XML数据的请求:

和json请求几乎一样,只有请求参数修改为xml即可:

 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/atom+xml", nil];

XML数据的解析:

对xml进行解析:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <result>
  3. <meeting addr="203">
  4. <creator>张一</creator>
  5. <member>
  6. <name>张二</name>
  7. <age>20</age>
  8. </member>
  9. <member>
  10. <name>张三</name>
  11. <age>21</age>
  12. </member>
  13. <member>
  14. <name>张四</name>
  15. <age>22</age>
  16. </member>
  17. </meeting>
  18. <meeting addr="204">
  19. <creator>李一</creator>
  20. <member>
  21. <name>李二</name>
  22. <age>20</age>
  23. </member>
  24. <member>
  25. <name>李三</name>
  26. <age>21</age>
  27. </member>
  28. <member>
  29. <name>李四</name>
  30. <age>22</age>
  31. </member>
  32. </meeting>
  33. </result>

1.获取xml文件中的数据:存放到字符串中

  1. //bundle是一个目录,包含了程序会使用到的资源
  2. NSString *path=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
  3. NSString *_xmlContent=[[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

用NSXMLParser实现解析:

  1. NSXMLParser解析简要说明
  2. 1.是sax方法解析
  3. 2.需要创建NSXMLParser实例 (alloc)
  4. 并创建解析器 (initWithData:)
  5. 为解析器定义委托 (setDelegate:)
  6. 运行解析器 (parser)
  7. ++++++当parser初始化并执行parse语句时([parser parse]),程序会跳到代理方法里面走第一个代理方法++++++
  8. 3.这种解析方式是利用它的代理NSXMLParserDelegate实现的
  9. 第一个代理方法:开始处理xml数据,它会把整个xml遍历一遍,识别元素节点名称
  10. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
  11. 第二个代理方法:也就是得到文本节点里存储的信息数据
  12. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
  13. 第三个代理方法:存储从第二个代理方法中获取到的信息
  14. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
  15. 这就是解析的过程,在这个过程中会不停的重复的执行这三个代理方法,直到遍历完成
  16. 另外:
  17. 解析开始执行的方法
  18. - (void)parserDidStartDocument:(NSXMLParser *)parser;
  19. 解析结束执行的方法
  20. - (void)parserDidEndDocument:(NSXMLParser *)parser;
  21. 当出现解析错误的时候,会执行这个方法
  22. - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;

解析开始:

2.准备工作:

  1. NSXMLParser *parse=[[NSXMLParser alloc] initWithData:[_xmlContent dataUsingEncoding:NSUTF8StringEncoding]];
  2. [parse setDelegate:self];
  3. [parse parse];
  4. [parse release];

3.三个代理方法具体实现:

  1. //第一个代理方法:
  2. - (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
  3. {
  4. //判断是否是meeting
  5. if ([elementName isEqualToString:@"meeting"]) {
  6. //判断属性节点
  7. if ([attributeDict objectForKey:@"addr"]) {
  8. //获取属性节点中的值
  9. NSString *addr=[attributeDict objectForKey:@"addr"];
  10. }
  11. }
  12. //判断member
  13. if ([elementName isEqualToString:@"member"]) {
  14. NSLog(@"member"]);
  15. }
  16. }
  17. //第二个代理方法:
  18. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
  19. {
  20. //获取文本节点中的数据,因为下面的方法要保存这里获取的数据,所以要定义一个全局变量(可修改的字符串)
  21. //NSMutableString *element = [[NSMutableString alloc]init];
  22. //这里要赋值为空,目的是为了清空上一次的赋值
  23. [element setString:@""];
  24. [element appendString:string];//string是获取到的文本节点的值,只要是文本节点都会获取(包括换行),然后到下个方法中进行判断区分
  25. }
  26. //第三个代理方法:
  27. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  28. namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
  29. NSString *str=[[NSString alloc] initWithString:element];
  30. if ([elementName isEqualToString:@"creator"]) {
  31. NSLog(@"creator=%@",str);
  32. }
  33. if ([elementName isEqualToString:@"name"]) {
  34. NSLog(@"name=%@",str);
  35. }
  36. if ([elementName isEqualToString:@"age"]) {
  37. NSLog(@"age=%@",str);
  38. }
  39. [str release];
  40. }

解析xml数据的时候,

每当遇到元素节点的时候都会执行第一个代理方法,如果有属性节点,可以直接在这个方法中获取里面的值;

每当遇到文本节点的时候都会执行第二个代理方法,获取文本节点中的值然后到第三个方法中进行区分。

如果是换行符的话也会获取,因为换行符也是文本节点,不过当一个元素节点结束后的换行符是不会获取的。

比如说:(换行符1)<li>文本节点</li>(换行符2)

元素节点前后各有一个换行符,这时只会获取换行符1,而不会获取换行符2。

4.处理错误:打印错误

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
NSLog(@"%@",[parseError description]);
}

iOS关于XML解析请求数据的更多相关文章

  1. 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)

    一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...

  2. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  3. iOS平台XML解析类库对比和安装说明

    在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...

  4. 【IOS】 XML解析和xml转plist文件(GDataXML)

    iOS对于XML的解析有系统自带的SDK--NSXMLParser,鄙人愚拙,只会用GDataXML进行解析,这里仅介绍GData的使用.(以下图为例) 1.对于一个xml文件,先读取出来 NSDat ...

  5. iOS项目之模拟请求数据

    如何在iOS开发中更好的做假数据? 当工期比较紧的时候,项目开发中会经常出现移动端等待后端接口数据的情形,不但耽误项目进度,更让人有种无奈的绝望.所以在开发中,我们常常自己做些假数据,以方便开发和UI ...

  6. iOS - OC - XML 解析 - NSXMLParser

    //4.解析数据 //4.1 创建XML解析器:SAX NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data]; //4.2 设置代理 ...

  7. iOS开发XML解析

    xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundat ...

  8. iOS开发-简单解析JSON数据

    什么是JSON   JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组   {“nam ...

  9. cocos2d-x 中XML解析与数据存储

    一不小心就玩了一周的游戏了.哎.玩的时候时间过得总是这么快... 于是今天决定看一下之前不怎么非常熟悉的XML;(之前做游戏时数据的储存用到过XML,但这块是还有一个同事在做,所以不怎么熟悉), 看了 ...

随机推荐

  1. 【来自媳妇的需求】PHP实现随机数和方程求解

    话说2015.11.06 ,北京下了第一场雪.16年的今天没下雪,但是雾霾还是不小的,帮媳妇整理她工作时,出现了下面的需求,便想到使用PHP来写程序来进行求解. [需求] 1. 给出一个平均值X,反过 ...

  2. 线程.FTP.SFTP.打包

    Windows就是多线程模式.每一个解决方案就是一个进程.一个进程下拥有多个线程. 简单点.单核的处理器不存在多线程.是CPU在每一个线程上切换处理.在人反应不过来的情况下完成同步的效果. 比如左手画 ...

  3. 浅入浅出dubbo

    1. Dubbo是什么? 只是一个框架 Hibernate是持久层框架,SpringMVC是MVC的框架,而Dubbo是分布式服务框架. 是框架而不是服务 所以不是像Tomcat或Memcached可 ...

  4. 深入浅出node(1) Node简介

    这一系列主要是自己在学习深入浅出node.js这本书的学习笔试,部分加入了自己的一些理解 分享给一起学习node的小伙伴 自己还是个初学者 有很多地方理解的不到位 一起交流 一 什么是node 1.1 ...

  5. css(二)

    本文是一些作者在长期写代码中总结的常用css查询,写在本博客中,方便以后查询. 1. 颜色属性:   color HEX(十六进制色:color: #FFFF00 --> 缩写:#FF0) RG ...

  6. Android-两种方式实现走马灯效果

    第一种方法(很普遍,很简单的在xml布局文件中设置TextView的属性): <TextView android:id="@+id/tv_text" android:layo ...

  7. 1、软件工程师要阅读的书籍 - IT软件人员书籍系列文章

    软件工程师要阅读的书籍估计是项目组内最多的.软件工程师处于项目组中最基础的人员储备阶层,与项目的关系最密切.当然,现在是大数据时代,我们无法全部看完所有相关的书籍,只能够先学习工作需要的知识,然后在项 ...

  8. Oracle解锁,解决“ora00054:资源正忙”错误

    Oracle解锁,解决“ora00054:资源正忙”错误 一.处理步骤:--1.获取被锁对象的session_idSELECT session_id FROM v$locked_object; --2 ...

  9. WPF中,Combox的SelectedItem属性绑定成功后,未能默认显示上一次选择的结果。

    问题描述: Combox中,设定了绑定对象,但是在第一次进入时却没有显示上次选中的项.      1)查看SelectedItem对应绑定的值,也是有的(启动时,读取上次设置的结果,来初始化界面). ...

  10. SQL范式

    第一范式:确保每列的原子性(字段不可分). 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 释义: 1.每一列属性都是不可再分的属性值,确保每一列的原子性 ...