Senior进阶 网络之数据解析
一、解析的基本概念
1.解析:从事先规定好的格式中提取数据
2.解析的前提:提前约定好格式,数据提供方按照格式提供数据、数据获取方则按照格式获取数据
3.iOS开发常见的解析:XML解析、JSON解析
二、XML数据结构
1.XML:Extensible Markup Language (可扩展标记语言),主流数据格式之一,可以用来存储和传输数据。
2.XML数据格式的功能:数据交换、内容管理、用作配置文件。(目前的用法是用作配置文件和格式布局)
3.XML数据结构的语法
1.声明
2.节点节点使用一对标签表示:起始和结束标签
3.根节点是起始节点,只有一个,节点可以嵌套
4.节点可以有值,存储在一对子标签中
SAX的优势:
1.基于事件驱动的解析方式,
2.逐行解析
3.它只读不可写(只能解析读取)
4.如果是大型数据,推荐使用SAX解析,是因为逐行解析,效率高
三、进行XML数据结构解析时使用到的SAX工具,DOM工具
1.SAX解析:Simple API for XML。基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)
2.NSXMLParser类
1.NSXMLParser是iOS自带的XML解析类,采用SAX方式解析数据
2.解析过程由NSXMLParserDelegate协议方法回调
3.解析过程:开始标签 --> 取值 --> 结束标签 --> 取值
3.NSXMLParser的初始化、和设置的相关属性、方法
1.initWithContentsOfURL: ----- 通过NSURL创建解析器
2.initWithData: ----- 通过NSData创建解析器
3.setDelegate: -----为解析器定义委托
4.parse: ----- 运行解析器
4.NSXMLParserDelegate协议方法
1.parserDidStartDocument: ----- 报告解析的开始
2.parser:didStartElement:namespaceURI:qualifiedName:attributes: ----- 发现标签开始的处理函数(即报告元素的开始以及元素的属性)
3.parser:foundCharacters: ----- 处理标签包含内容字符 (报告标签的所有或部分内容)
4.parser:didEndElement:namespaceURI:qualifiedName: ----- 发现标签结束符的处理函数,保存标签各项数据(即报告标签的结束标记)
5.parserDidEndDocumentp: ----- 报告解析的结束
6.parser:parserErrorOccurred: ----- 报告不可恢复的解析错误
四、进行XML数据结构解析时使用到的DOM工具
1.DOM:Document Object Model (文档对象模型)。DOM方式解析XML时,读入整个XML文档并构建一个驻留内存的树结构 (节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值。而且通常情况下,可以借助XPath,直接查询XML节点
2.GDataXMLNode
1.采用DOM方式解析数据
2.iOS中包含一个C语言的动态链接库libxml2.dylib(xcode7以后改为libxml2.tbd),解析速度比NSXMLParser快。
3.GDataXMLNode是Google提供的开源XML解析类,对libxml2.tbd进行了Objective-C的封装,能对较小或中等的xml文档进行读写操作且支持XPath语法。
3.GDataXMLNode使用方法
1.获取GDataXMLNode.h/m文件,将GDataXMLNode.h/m文件添加到工程中
2.向工程中增加"libxml2.dylib"动态库
3.在工程的"Build Settings"页中找到"Header Search Path"项,添加"/usr/include/libxml2".
4.导入"GDataXMLNode.h"文件到头文件中,如工程能编译通过,则说明GDataXMLNode添加成功。
4.GDataXMLElement类的方法
1.name ----- 获取标签名
2.attributeForName ----- 获取属性节点
3.stringValue ----- 获取标签间的字符串值
4.rootElement ----- 根节点
五、JSON数据结构
1.JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,易于阅读和编写,同时也易于机器解析和生成。
2.JSON数据结构的语法
1.JSON文件有两种结构
对象:"名称/值"对的集合。不同的语言中,它被理解为对象,记录,结构,字典,哈希表,有键列表,或者关联数组。以"{"开始,以"}"结束,是"名称/值"对的集合。名称和值中间用":"隔开。多个"名称/值"对之间用","隔开
数组:值的有序列表。zai'da'bu'fen'yu'yan'zhong在大部分语言中,它被理解为数组。以"[",yi以"]"结束,中间是数据。数据以","分隔。
3.JSON的数据类型:字符型、数值、BOOL、对象、数组
4.JSON数据结构的功能;数据交换、内容管理、配置文件(和XML基本一样)
六、使用Foundation进行JSON解析
1.NSJSONSerialization
NSJSONSerialization里面包含了两个方法来通过不同数据形式解析JSON数据
1.JSONObjectWithData:options:error: ----- 使用缓冲区数据解析JSON
2.writeJSONObject:toStream:options:error: ----- 使用文件流的形式解析JSON
七、XML与JSON两种数据结构的优缺点
1.XML的优缺点:
1.优点:
1.格式统一,符合标准
2.容易与其它系统进行远程交互,数据共享比较方便
2.缺点:
1.XML文件格式文件庞大,格式复杂,传输占用带宽
2.服务器端和客户端都需要花费大量代码来解析XML,不论服务端还是客户端都使代码变得异常复杂和不容易维护
3.客户端不同浏览器只见解析XML的方式不一致,需要重复编写很多代码
4.服务端和客户端解析XML花费资源和时间。
2.JSON优缺点:
1.优点:
1.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小
2.易于解析这种语言
3.支持多种语言,包括ActionScript、C、C#、ColdFusion、Java、JavaScript、Perl、PHP、Python、Ruby等语言服务器端语言,便于服务器端的解析
4.因为JSON格式能够直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,但是完成的任务不变,且易于维护
2.缺点:
1.没有XML格式这么推广的深入人心和使用广泛,没有XML那么通用性
2.JSON格式目前在Web Service推广还属于初级阶段
总结
1.数据解析:从某种格式的数据中提取自己所需要的数据
2.主流的数据交换格式有两种:XML和JSON
3.XML解析分为两种:SAX解析和DOM解析
4.XNL解析工具:NSXMLParser、GDataXMLNode、TochXML和KissXML等
5.JSON解析工具:JSONKit、NSJSONSerialization、TouchJSON和SBJSON等,其中NSJSONSerialization是系统提供的解析类,其解析效率是最高的