iOS-数据持久化基础-JSON与XML数据解析
解析的基本概念
所谓“解析”:从事先规定好的格式串中提取数据
解析的前提:提前约定好格式、数据提供方按照格式提供数据、数据获取方按照格式获取数据
iOS开发常见的解析:XML解析、JSON解析



















一、XML数据结构
解析的基本概念
所谓“解析”:从事先规定好的格式串中提取数据
解析的前提:提前约定好格式、数据提供方按照格式提供数据、数据获取方按照格式获取数据
iOS开发常见的解析:XML解析、JSON解析
XML数据结构
XML解析
SAX⽅方式解析
从上往下,⼀一点⼀一点读取
性能好
苹果推荐使⽤用
DOM⽅方式
⼀一次性将XML⽂文档以树形结构读⼊入内存
内存的消耗⽐比较⼤大
在iOS开发默认不⽀支持DOM⽅方式解析
有⼀一些第三⽅方框架实现DOM⽅方式
只适合⼩小的xml⽂文件的解析
KissXML & GDat
XML数据结构基本概念
XML:Extensible Markup language (可扩展标记语言),主流格式之一,可以用来存储和传输数据格式之一,可以用来存储和传输数据
XML数据格式的功能
1、数据交换
2、内容管理
3、用作配置文件
XML数据结构的语法
1、声明
2、节点使用一对标签表示
3、根节点是起始节点,只有一个。节点可以嵌套
4、节点可以有值,存储在一对标签中

如何进行XML解析
有以下两种方法:
1、SAX解析
SAX:Simple API for XML .基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)
SAX解析XML,是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,SAX解析器会检测整个XML树形结构,你的代码会控制它在哪里停止,使用哪些数据之类的事情。就是说,SAX可控制性强,占用内存小,适用于提取部分数据。当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理,如果XML格式在某一处出现错误,前面的数据会被提取出来,错误后面数据的就显示不出来。
NSXMLParse类是iOS自带的XML解析类。采用SAX方式解析数据
解析过程由NSXMLParserDelegate协议方法回调
解析过程:开始标签->取值->结束标签->取值
代码的实现过程是,首先我们建立一个XML文档,并引入文件,如下:

其次我们建立一个表格试图控制器(TableViewController)
定义一个私有属性数组datasource用来存储模型数据和startTag属性用来暂存起始标签

同时在方法ViewDidLoad里面获取文件数据并指定代理<NSXMLParserDelegate>//解析器协议,同时为对应的重用标识符注册单元格的类型

NSXMLParserDelegate 解析器协议里面有如下方法:


当XML在逐个解析文件数据时,由于起始标签和结束标签名字一样,当解析到结束标签时,为了避免解析到的结束标签后面的内容将模型对象中的相应的属性覆盖,在解析结束标签的方法内部将起始标签置为nil
在每个方法内部我们同时打印了一下方法名,这样我们就可以在输出端清晰的看到方法的执行顺序,
同时在表格的设置方法内部建立重建机制

在设置相应的行数和分区,我们就可以在模拟器上显示出如下结果:

2、DOM工具解析
DOM:Document Object Model (文档对象模型)。解析时需要将XML文件整体读入,并且将XML结构化成树状,使用时再通过树状结构读取相关数据,查找特定节点,然后对节点进行读或写。他的主要优势是实现简单,读写平衡;缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显。当文件内容出现错误时,在输入框内会标记出错误的位置
GDataXMLNode是Google提供的开元XML解析类,对libxml2.dylib进行了Objective-C的封装,因此在使用GDataXML之前,你需要先导入libxml2。
iOS中包含一个C语言的动态链接库libxml2.dylib,解析速度比NSXMLParser快

二、JSON数据结构
JSON数据结构基本概念
Javascript Object Notation ,轻量级的数据交换格式,采用完全独立于语言的文本格式,被称为理想的数据交换语言,易于人阅读和便携,同时也易于及其解析何程,由于JSON解析便捷、快速,并且相同数据用JSON编辑所占的内存更小,所以在iOS中我们我们使用JSON解析更加普遍。
JSON文档有两种结构:对象 、数据
对象:以“{“开始,以”}”结束,是“名称/值”对儿的集合。名称和值中间用“:”隔开。多个“名称/值”对之间用“,”隔开。类似OC中的字典。
数组:以“["开始,以“]”结束,中间是数据。数据以“,”分割。
JSON中的数据类型:字符串、数值、BOOL、对象、数组。
例如:

JSON – OC 转换对照表

JSON数据结构的功能
1、数据交换
2、内容管理
3、配置文件
JSON解析方案
在iOS中,JSON的常见解析方案有4种
第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
苹果原生(自带):NSJSONSerialization(性能最好)

下面是NSJSONSerialization解析过程:

XML数据结构基本概念
XML:Extensible Markup language (可扩展标记语言),主流格式之一,可以用来存储和传输数据格式之一,可以用来存储和传输数据
XML数据格式的功能
1、数据交换
2、内容管理
3、用作配置文件
XML数据结构的语法
1、声明
2、节点使用一对标签表示
3、根节点是起始节点,只有一个。节点可以嵌套
4、节点可以有值,存储在一对标签中

如何进行XML解析
有以下两种方法:
1、SAX解析
SAX:Simple API for XML .基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)
SAX解析XML,是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,SAX解析器会检测整个XML树形结构,你的代码会控制它在哪里停止,使用哪些数据之类的事情。就是说,SAX可控制性强,占用内存小,适用于提取部分数据。当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理,如果XML格式在某一处出现错误,前面的数据会被提取出来,错误后面数据的就显示不出来。
NSXMLParse类是iOS自带的XML解析类。采用SAX方式解析数据
解析过程由NSXMLParserDelegate协议方法回调
解析过程:开始标签->取值->结束标签->取值
代码的实现过程是,首先我们建立一个XML文档,并引入文件,如下:

其次我们建立一个表格试图控制器(TableViewController)
定义一个私有属性数组datasource用来存储模型数据和startTag属性用来暂存起始标签

同时在方法ViewDidLoad里面获取文件数据并指定代理<NSXMLParserDelegate>//解析器协议,同时为对应的重用标识符注册单元格的类型

NSXMLParserDelegate 解析器协议里面有如下方法:


当XML在逐个解析文件数据时,由于起始标签和结束标签名字一样,当解析到结束标签时,为了避免解析到的结束标签后面的内容将模型对象中的相应的属性覆盖,在解析结束标签的方法内部将起始标签置为nil
在每个方法内部我们同时打印了一下方法名,这样我们就可以在输出端清晰的看到方法的执行顺序,
同时在表格的设置方法内部建立重建机制

在设置相应的行数和分区,我们就可以在模拟器上显示出如下结果:

2、DOM工具解析
DOM:Document Object Model (文档对象模型)。解析时需要将XML文件整体读入,并且将XML结构化成树状,使用时再通过树状结构读取相关数据,查找特定节点,然后对节点进行读或写。他的主要优势是实现简单,读写平衡;缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显。当文件内容出现错误时,在输入框内会标记出错误的位置
GDataXMLNode是Google提供的开元XML解析类,对libxml2.dylib进行了Objective-C的封装,因此在使用GDataXML之前,你需要先导入libxml2。
iOS中包含一个C语言的动态链接库libxml2.dylib,解析速度比NSXMLParser快

二、JSON数据结构
JSON数据结构基本概念
Javascript Object Notation ,轻量级的数据交换格式,采用完全独立于语言的文本格式,被称为理想的数据交换语言,易于人阅读和便携,同时也易于及其解析何程,由于JSON解析便捷、快速,并且相同数据用JSON编辑所占的内存更小,所以在iOS中我们我们使用JSON解析更加普遍。
JSON文档有两种结构:对象 、数据
对象:以“{“开始,以”}”结束,是“名称/值”对儿的集合。名称和值中间用“:”隔开。多个“名称/值”对之间用“,”隔开。类似OC中的字典。
数组:以“["开始,以“]”结束,中间是数据。数据以“,”分割。
JSON中的数据类型:字符串、数值、BOOL、对象、数组。
例如:

JSON – OC 转换对照表

JSON数据结构的功能
1、数据交换
2、内容管理
3、配置文件
JSON解析方案
在iOS中,JSON的常见解析方案有4种
第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
苹果原生(自带):NSJSONSerialization(性能最好)

下面是NSJSONSerialization解析过程:

iOS-数据持久化基础-JSON与XML数据解析的更多相关文章
- 玩转iOS开发 - JSON 和 Xml 数据解析
前言 Json 和xml是网络开发中经常使用的数据格式,JSON轻量级.xml相对较复杂.所以如今用JSON的比例很大.基本上从server获取的返回数据都是JSON格式的,作为iOS开发人员,解析J ...
- iOS开发——网络Swift篇&JSON与XML数据解析
JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...
- php生成json或者xml数据
, ,'数据返回成功',$arr);echo $xml;?>
- C#解析json和xml数据
C#解析json和xml数据 // 用到的包using Newtonsoft.Json; // using Newtonsoft.Json.Linq; const string value = &qu ...
- Ajax--PHP+JQuery+Ajax解析json、XML数据、加载页面
一.JQuery+Ajax用get.post方式提交和请求数据 知识要点: $('#userName').blur(function () { var txt = $(this).val(); $.a ...
- python数据处理(一)之供机器读取的数据 csv,json,xml
代码与资料 https://github.com/jackiekazil/data-wrangling 1 csv 1.1导入csv数据 1.2将代码保存到文件中并在命令行中运行 2.json 2 导 ...
- 多线程与网络之JSON和XML数据的解析
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 数据交换格式Json与XML
什么是数据交换格式: 主流的有Json.XML.HTML. 数据交换格式的应用场景: 移动端(安卓,IOS)通讯方式采用http协议+Json格式的restful风格. 很多互联网公司都是用Http协 ...
- json和xml数据的解析
一 json数据 1一条json就像一个对象,也想像OC中的数组,且内嵌了很多键值对字典 {"name" : "jack", "age" : ...
随机推荐
- Struts2之提交对象数组至后台
struts2中有许多很好的特性,比如在设置好getter和setter方法后,加上前端的匹配设置,后台即可自动将前端输入的数据转换为后台的相应的对象. 如现在传入一个Person类的对象,其中Per ...
- Codevs 1021 (玛丽卡)
题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...
- 原生js-日历插件
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 为什么匿名内部类只能访问final变量【转】
是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final.因为虽然匿名内部类在方法的内部,但实际编译的时候, ...
- [转]WinForms GridListEditor - How to restore values in the auto filter row
http://dennisgaravsky.blogspot.hk/2016/05/winforms-gridlisteditor-how-to-restore.html using System; ...
- jsti 和EL用法注意点
今天使用stl 结合El做jsp页面展现,出现了个问题,怎么调也调不好,最后将jstl的源码拿来跟踪调了一下才明白其中的道理. 在使用jstl tag <c:forEach var=" ...
- Linux内核--网络栈实现分析(十)--网络层之IP协议(下)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7552455 更多请查看专栏,地 ...
- PHPBB公布新的维护版本
9月28日,PHPBB官方网站公布了新PHPBB的最新消息.这个版本命名为:"Richard 'D¡cky' Foote",版本号为3.0.12.据官方的说明,“这个版本是一个维护 ...
- Java Spring AOP用法
Java Spring AOP用法 Spring AOP Java web 环境搭建 Java web 项目搭建 Java Spring IOC用法 spring提供了两个核心功能,一个是IoC(控制 ...
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...