iOS- 网络访问JSON数据类型与XML数据类型的实现思路及它们之间的区别
1.JSON (基本上移动开发的主要数据传输都是JSON)
1.1.JSON特点:
a.[] 表示数组
b.{} 表示字典 - 对象模型建立关系
c.应用非常多,基本上移动开发的主要数据传输都是JSON
d. 读取数据时效率高
e.在做实现读取数据时,简单便捷
1.2.实现
要使用JSON,从网络上获取到数据之后使用:
[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
可以将网络数据反序列化为字典或者数组,具体转换类型,看JSON最外面的一个括号
2.XML (主要用于上传一些文件,移动开发时用的不多)
2.1.JSON特点:
* XML
a. 大,解析费劲
b. 解析步骤麻烦,效率低下
c. 直接看XML方便看出数据
2.2.实现
XML解析需要
// 1) 实例化解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 2) 设置代理
parser.delegate = self;
// 3)开始解析
[parser parse];
// 4)调用代理方法
===================================================================
XML解析的六个代理方法
// 1. 开始解析文档,在这里做初始化工作
/**
1. 解析准备工作
- (void)parserDidStartDocument:(NSXMLParser *)parser
2.3.4 三个步骤会循环执行,一直到所有的节点解析完成
2.解析一个节点,即节点中的字典
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
3.负责拼接字符串,查找节点内容,可能会多次
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
4. 节点完成,可以用KVC直接设置对象内容
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
5. 用于收尾工作
- (void)parserDidEndDocument:(NSXMLParser *)parser
6. 解析出错,需要把中间数据清除,以免造成不必要的错误
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
7.当XML格式如下:
<book pages="12" index="1">
<item id="1558" title="仙逆" tag="玄幻" source="/upload/file/2013_07_4/2013718101155179.zip" author="耳根" updatetime="2013-6-21 11:06:17" summary="仙逆............." clicks="86945" words="" logo="/upload/pic/2013_06_5/20136211172503.png" jx="False" />
</book>
可以将所有的属性设置到一个节点中的属性节点中,如此只需要第二步即可。
清澈Saup
iOS- 网络访问JSON数据类型与XML数据类型的实现思路及它们之间的区别的更多相关文章
- iOS网络访问之使用AFNetworking
AFNetworking是IOS上常用的第三方网络访问库,我们可以在github上下载它,同时github上有它详细的使用说明,最新的AFNetworing2.0与1.0有很大的变化,这里仅对2.0常 ...
- QF——网络之JSON解析和XML解析
JSON解析和XML解析: 用苹果原生的代理方式的网络请求后返回的都是二进制数据(NSData). 若是json,则通过NSJSONSerialization把NSData数据转换为JSON对象. N ...
- ios网络访问官方演示程序
官方演示程序 AppDelegate 设置缓存 NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * ...
- IOS 网络浅析-(五 xml解析)
XML 可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 易读性高,编码手写难度小,数据量大 NSXMLPars ...
- iOS网络编程解析协议二:XML数据传输解析
XML两种解析方式,一种是SAX,NSXMLParser是SAX方法解析,另一种是DOM(Document Object Model); 区别: SAX: 只能读,不能修改,只能顺序访问,适合解析大型 ...
- IOS网络访问详解
第一.访问网络的方式 同步请求:数据的请求过程是由主线程发起的,网络加载需要一定的时间,因此会堵塞主线程 异步请求:数据的请求在多线程中完成 同步请求无法取消,异步请求的过程中可以取消,同步请求无法监 ...
- mssql sqlserver xml数据类型专题
摘要: 下文将详细讲述sql server xml数据类型的相关知识,如下所示: 实验环境: sql server 2008 R2 xml数据类型简介: mssql sqlserver xml数据类型 ...
- iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)
一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...
- iOS网络-02-数据解析(JSON与XML)
数据交互格式 服务器返回给用户的数据,通常是以下两种方式: JSON XML JSON 一种轻量级的数据数据格式,体积比XML小,是服务器返回给移动端通常采用的格式 用使用JSON文件中的数据,需要对 ...
随机推荐
- python新手第一天学习笔记-第一个ptyhon程序和python变量
一.python 的注释和第一个python 程序 : 1.单行注释 # Author Xiajq 2.多行注释 ''' ------------注释内容----------------------- ...
- python类的多态
1. 什么是多态 多态指的是同一种/类事物的不同形态 2. 为何要用多态 多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象 多态性的精髓:统一 ...
- Go语言中的变量
1 概述 变量(Variable)是程序运行过程中,内容可以变化(修改)的量,变量的功能是存储用户的数据,是计算机语言中能储存计算结果或能表示值抽象概念.变量,是通过变量的标识符定位值的过程.变量的内 ...
- linux (ubuntu)安装pycharm
1. 下载 http://www.jetbrains.com/pycharm/download/ 选择Linux Tab,选择下载免费的Community Edition. 2. 安装PyCharm ...
- Java基础——NIO(二)非阻塞式网络通信与NIO2新增类库
一.NIO非阻塞式网络通信 1.阻塞与非阻塞的概念 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read() 或 write() 时,该线程被阻塞,直到有一些数据被读取或写入,该线程在 ...
- nmap教程(下)
九.脚本引擎 脚本文件存放在/usr/share/nmap/scripts目录下 SCRIPT SCAN: -sC: equivalent to --script=default #启用默认类脚本 - ...
- MVC保存二进制到数据库,并显示文件的方法(图片显示)
通过两篇文章解决了数据库存储图片并显示到View的方法: http://blog.sina.com.cn/s/blog_6da396a50101639u.htmlhttp://www.cnblogs. ...
- <简明>Markdown指南
什么是Markdown?Markdown是一种轻量级的「标记语言」,通常为程序员群体所用,目前它已是全球最大的技术分享网站 GitHub 和技术问答网站 StackOverFlow 的御用书写格式. ...
- [数据结构]_[C/C++]_[链表的最佳创建方式]
场景 1.链表在C/C++里使用非常频繁, 因为它非常使用, 可作为天然的可变数组. push到末尾时对前面的链表项不影响. 反观C数组和std::vector, 一个是静态大小, 一个是增加多了会对 ...
- PHP用url传递数组
数组传递这么写: echo "<a href=2.php?info=".base64_encode(serialize($information))." > ...