数据解析--JSON & XML

>JSON

是一种轻量级的 数据格式 (就像文档有txt格式  ,doc格式,JSON是数据的一种表现格式),一般用于数据交互,

服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外,是文件)

JSON的格式很像OC中的数组,字典.标准的JSON格式:key必须用双引号,不推荐单引号

想要从JSON中拿到具体的数据,需要对JSON进行解析.JSON--->OC

>JSON解析方案

      • iOS中,JSON的常见解析方案有4
      • 第三方框架:JSONKitSBJsonTouchJSON(性能从左到右,越差)
      • 苹果原生(自带):NSJSONSerialization性能最好
      • NSJSONSerialization的常见方法
      • JSON数据 à OC对象

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

      • OC对象 à JSON数据

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

XML

      • 什么是XML
      • 全称是Extensible Markup Language,译作“可扩展标记语言”
      • JSON一样,也是常用的一种用于交互的数据格式
      • 一般也叫XML文档(XML Document
      • XML举例

<videos>

    <video name="小黄人 01" length="30" />

    <video name="小黄人 02" length="19" />

    <video name="小黄人 03" length="33" />

</videos>

XML语法

      • 一个常见的XML文档一般由以下部分组成
      • 文档声明
      • 元素(Element
      • 属性(Attribute
      • XML语法文档声明
      • XML文档的最前面,必须编写一个文档声明,用来声明XML文档的类型
      • 最简单的声明

<?xml version="1.0" ?>

      • encoding属性说明文档的字符编码

<?xml version="1.0" encoding="UTF-8" ?>

XML语法元素(Element

      • 一个元素包括了开始标签和结束标签
      • 拥有元素内容:<video>小黄人</video>
      • 没有元素内容:<video></video>
      • 没有元素内容的简写:<video/>
      • 一个元素可以嵌套若干个子元素(不能出现交叉嵌套)

<videos>

    <video>

        <name>小黄人 第01</name>

             <length>30</length>

    </video>

</videos>

      • 规范的XML文档最多只有1个根元素,其他元素都是根元素的子孙元素
      • XML语法元素的注意
      • XML中的所有空格和换行,都会当做具体内容处理
      • 下面两个元素的内容是不一样的
      • 1

<video>小黄人</video>

      • 2

<video>

    小黄人

</video>

XML语法属性(Attribute

      • 一个元素可以拥有多个属性

<video name="小黄人 01" length="30" />

      • video元素拥有namelength两个属性
      • 属性值必须用 双引号"" 或者 单引号'' 括住
      • 实际上,属性表示的信息也可以用子元素来表示,比如

<video>

    <name>小黄人 第01</name>

        <length>30</length>

</video>

XML解析

      • 要想从XML中提取有用的信息,必须得学会解析XML
      • 提取name元素里面的内容

<name>小黄人 第01</name>

      • 提取video元素中namelength属性的值

<video name="小黄人 01" length="30" />

      • XML的解析方式有2
      • DOM:一次性将整个XML文档加载进内存,比较适合解析文件
      • SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析文件
      • iOS中的XML解析
      • iOS中,解析XML的手段有很多
      • 苹果原生
      • NSXMLParserSAX方式解析,使用简单
      • 第三方框架
      • libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOMSAX方式解析
      • GDataXMLDOM方式解析,由Google开发,基于libxml2
      • XML解析方式的选择建议
      • 大文件:NSXMLParserlibxml2
      • 小文件:GDataXML
      • NSXMLParser
      • 使用步骤

// 传入XML数据,创建解析器

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

// 设置代理,监听解析过程

parser.delegate = self;

// 开始解析

[parser parse];

      • NSXMLParser采取的是SAX方式解析,特点是事件驱动,下面情况都会通知代理
      • 当扫描到文档(Document)的开始与结束
      • 当扫描到元素(Element)的开始与结束
      • NSXMLParserDelegate
      • 当扫描到文档的开始时调用(开始解析)

- (void)parserDidStartDocument:(NSXMLParser *)parser

      • 当扫描到文档的结束时调用(解析完毕)

- (void)parserDidEndDocument:(NSXMLParser *)parser

      • 当扫描到元素的开始时调用(attributeDict存放着元素的属性)

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

      • 当扫描到元素的结束时调用

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

GDataXML使用

    • GDataXML中常用的类
    • GDataXMLDocument:代表整个XML文档
    • GDataXMLElement
    • 代表文档中的每个元素
    • 使用attributeForName:方法可以获得属性值

posted @ 2015-11-06 12:17  LDSmallCat  阅读(270)  评论(0编辑  收藏  举报