Senior进阶 网络之数据解析

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是系统提供的解析类,其解析效率是最高的
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容