解析的基本概念:从事先规定好的格式中提取数据。
解析的前提:数据提供方按照格式提供数据,获取方从规定的格式中获取数据。
iOS常见的解析方式:XML解析和JOSN解析。
XML:Extensible Mark Language,可扩展标记语言,主流数据格式之一,可以用来存储和传输数据。
功能:
1.数据交换
2.内容管理
3.配置文件
XML数据结构的语法:
- 声明式语法
- 节点使用一对标签表示:开始标签和结束标签
- 根节点是起始节点,只有一个,节点可以嵌套
- 节点可以有值,存储在一对标签中
解析工具:
SAX解析:Simple API for XML:基于事件驱动的解析方式,逐行解析数据(采用协议回调机制)
初始化解析器:NSXMLParse,包含的方法
initWithContentsOfURL:通过NSURL创建解析器
initWithData:通过NSData创建解析器
setDelegate:设置解析器委托
parse:运行解析器
NSXMLParaDelegate:解析协议
parserDidStartDocument:报告解析开始
parser:didStartElement:namespaceURI:qualifiedName:attributes:发现开始标签的处理函数(即报告元素的开始及元素的属性)
parser:foundCharacters:处理标签包含的字符(报告标签包含的部分或全部内容)对于解析到数据需要使用全局属性接收数据
parser:didEndElement:namespaceURI:qualifiedName:attributes:发现结束标签的处理函数(即报告元素的结束,保存标签的各项数据)
parserDidElement:报告解析的结束
parser:parserErrorOccurred:报告不可恢复的解析错误
DOM解析:
DOM:Document Object Model(文档对象模型)
DOM方式解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意的XML节点,读取它的属性和值。
而且通常情况下,可以使用XPath,直接查询XML节点。
GDataXMLNode:
1.采用DOM解析方式
2.iOS中包含一个C语言的动态链接库libxml2.tbd,解析速度比NSXMLParse要快
3.GDataXMLNode是Google提供的开源XML解析类,对libxml2.tbd进行了Object-C进行了封装,能对中等或较小的XML文档进行读写操作且支持Path语法。
GDataXMLElement类的方法:
name:取标签名
attributeForName:取属性节点
stringValue:取标签间的值
rootElement:根节点
JSON(JavaScript Object Notation):
是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,易于阅读和编写,同时易于机器解析和生成。这些特性使JSON成为理想的数据交换格式。
JSON文件有两种结构:
对象:以{开始,以}结束
数组:以[开始,以]结束
JSON中的数据类型:字符串 数值 BOOL 数组 对象
功能:
数据交换
配置文件
存储内容
使用Foundation进行JSON解析
NSJSONSerialization里面包含了两个方法来通过不同数据形式解析JSON数据
1.JSONObjectWithData:options:error:使用缓冲区数据解析JSON
2.writeJSONObject:toStream:options:error:使用文件流的形式解析JSON
XML
优点:
1.格式统一,符合标准
2.容易与其他系统进行远程交互,数据共享比较方便
缺点:
1.XML文件格式庞大,格式复杂,传输占用带宽
2.服务器端和客户端都需要花费大量时间解析数据,不论是服务器端还是客户端都使代码变得异常复杂和难以维护
3.客户端不同浏览器之间解析XML方式不一致,需要重复编写很多代码
4.服务器端和客户端解析花费资源和时间
JSON
优点:
1.格式比较简单,易于读写,数据都是压缩的,占用带宽较小
2.易于解析这种语言
3.支持多种语言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等服务器端语言,便于服务器端的解析
4.因为JSON能够直接作为服务器端代码使用,大大简化了服务器端和客户端的代码量,但是完成的任务不变,易于维护
缺点:
1.没有像XML推广的深入人心和广泛使用,没有XML那么通用性
2.JSON格式目前在Web Server中还属于推广阶段
使用NSJSONSerialization的读取选项:
1.MutableContainers:让返回的JSON数据中的数组和字典是可更改的
2.AllowFragment:允许JSON返回的数据有多个根节点(允许你的JSON数据是一个字面值,比如字符串,数字等等)
3.MutableLeaves:使JSON返回的字符串是可更改的