您的位置:首页 > Web前端 > JavaScript

OC学习--JSON解析和XML解析

2015-06-16 20:02 639 查看
一、XML解析、

什么是XML?

|~ 扩展标记语言 (Extensible Markup Language, XML)

|~ 是一种标记语言,很类似HTML

|~XML设计的宗旨是传输数据和存储数据,而非显示数据

|~XML标签没有被预定义,需要自定义标签

|~具有自我描述性

|~格式统一,跨平台和语言

    

====================XML解析========================

1、使用系统类NSXMLParser比较繁琐,现在基本上已经不再使用

2、通常使用第三方类库GData库

第三方类库使用的步骤:

(1)导入GData库

底层使用系统的libxml2库, 使用的时候添加libxml2

(2)添加libxml二进制库

Build Phases ---> Link Binary

添加 libxml2.dylib

(3)设置头文件搜索路径  

Build Setting--->header  search Path 

添加   /usr/include/libxml2

(4)如果是arc的工程

Build Phases ---> Compile Source File

GDataXmlNode.m(非arc的)

填写编译选项:-fno-objc-arc

GData 第三方库 有两种方式解析

     1、获取根节点所有元素,遍历所有的子节点

eg.①、解析本地XML文件

  //1读取文件内容

        NSData *data=[NSData
dataWithContentsOfFile:PATH];

        //2.根据二进制数据创建文档树

        

        GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];

        //3、获取根节点
       
GDataXMLElement *root= [doc
rootElement];

        //4.获取根节点所有直接子节点
       
NSArray *ary= [root
children];//只有一个元素
       
GDataXMLElement *books=ary[0];

        //5.获取所有books的子节点(也就是book的一些信息)
       
NSArray *bookAry= [books
children];

        //定义一个数组用来存放解析出来的对象

        NSMutableArray *mArry=[[NSMutableArray
alloc]init];

        //6.遍历数组,解析出每一本书
       
for(GDataXMLElement *ele
in bookAry)
        {
           
Book *bk=[[Book
alloc]init];
           
NSArray *attrArr =[ele
attributes];
           
NSArray *gBook=[ele
children];
            bk.id=[attrArr[0]
stringValue];
            bk.language=[attrArr[1]
stringValue];
            bk.name=[gBook[0]
stringValue];
            bk.author=[[gBook[1]
elementsForName:@"name"][0]
stringValue] ;

            //bk.author=[gBook[1] stringValue];
            bk.price=[gBook[2]
stringValue];
            bk.summary=[gBook[3]
stringValue];
            [mArry
addObject:bk];
        }

②、解析网络数据

//1.将网络地址字符串转化成NSURL对象
   
NSURL *url=[NSURL
URLWithString:Path];

    //2.将访问地址获取二进制数据

    NSData *data=[[NSData
alloc]initWithContentsOfURL:url];

 //3.以二进制数据创建文档树

    GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];

其他同上(是一样的)

     2、使用xpath语法

==================XPATH介绍============================

|~ XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言

|~ XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

|~ XPath 使用路径表达式来选取 XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件
系统中看到的表达式非常相似。路径表达式是

从一个XML节点到另一个节点、或一组节点的书面步骤顺序。

===语法================================

eg、①、解析本地数据

//1读取文件内容

        NSData *data=[NSData
dataWithContentsOfFile:file];

        //2.根据二进制数据创建文档树

        GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];

 //3.获取文档树中的所有cd
 
NSArray *cdArry=[doc
nodesForXPath:@"//CD"
error:nil];

    //4.遍历数组保存所有信息

    NSMutableArray *mArry=[[NSMutableArray
alloc]init];
   
for (GDataXMLElement *ele
in cdArry) {
       
YBCd *cd=[[YBCd
alloc]init];
      
NSArray *Ary= [ele
children];
        cd.title= [Ary[0]
stringValue];
        cd.artist=[Ary[1]
stringValue];
        cd.country=[Ary[2]
stringValue];
        cd.company=[Ary[3]
stringValue];
        cd.price=[[Ary[4]
stringValue] floatValue];
        cd.years=[[Ary[5]
stringValue] intValue];
        [mArry
addObject:cd];

        
    }

②、解析网络数据

//1、将路径转化成NSURL对象
   
NSURL *url=[NSURL
URLWithString:file];

    //2.从网络请求数据

    NSData *data=[NSData
dataWithContentsOfURL:url];

    //3\创建文档树

    GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];

    //4.获取文档树中的所有cd
 
NSArray *cdArry=[doc
nodesForXPath:@"//CD"
error:nil];

    //5.遍历数组保存所有信息

    NSMutableArray *mArry=[[NSMutableArray
alloc]init];
   
for (GDataXMLElement *ele
in cdArry) {
       
YBCd *cd=[[YBCd
alloc]init];
      
NSArray *Ary= [ele
children];
        cd.title= [Ary[0]
stringValue];
        cd.artist=[Ary[1]
stringValue];
        cd.country=[Ary[2]
stringValue];
        cd.company=[Ary[3]
stringValue];
        cd.price=[[Ary[4]
stringValue] floatValue];
        cd.years=[[Ary[5]
stringValue] intValue];
        [mArry
addObject:cd];

        
    }

二、JSON数据解析

===============什么是JSON?====

是JaveScript Object Notation的缩写,是一种轻量级的数据交换格式,支持多种语言,包括C, C#, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析和生成。独立于平台,独立于语言。

======================语法========================

J SON文件中的数据是以名称/值对的形式存储的,多个数据用逗号隔开;

花括号保存对象,中括号保存数组。

{

  "root": {

    "books": {

      "book": [

        {

          "-id": "1",

          "-language": "ch",

          "name": "乔布斯传",

          "author": { "name": "沃尔特·艾萨克森" },

          "price": "80.00",

          "summary": "一本介绍乔布斯传奇一生的图书。"

        },

        {

          "-id": "2",

          "-language": "ch",

          "name": "呐喊",

          "author": { "name": "鲁迅" },

          "price": "12.00",

          "summary": "揭示了中国的社会面貌,控诉了封建制度的罪恶,喊出了“五四”时期革命者的心声。它反映了“五四”彻底不妥协地反封建主义的革命精神,适应了中国革命从旧民主主义向新民主主义转变的需要,在中国现代文化史和文学史上占有重要地位!"

        },

        {

          "-id": "3",

          "-language": "en",

          "name": "哈利波特",

          "author": { "name": "JK罗琳" },

          "price": "365.00",

          "summary": "主人公哈利·波特在霍格沃茨魔法学校六年的学习生活和冒险故事。"

        }

      ]

    }

  }

}

================JSON数据解析===================================

1、本地文件解析

//解析本地

//1.从文件中读取数据
NSData *dataBooke=[NSData dataWithContentsOfFile:PATH];

///2.将二进制数据转换为OC对象

        id obj=[NSJSONSerialization
JSONObjectWithData:data2 options:NSJSONReadingMutableContainers
error:nil];
       
id root=[obj objectForKey:@"root"];
       
id books=[root objectForKey:@"books"];
       
id bookArry=[books
objectForKey:@"book"];

        //3.遍历解析每一本书

           NSMutableArray *marr=[[NSMutableArray
alloc]init];
       
for (id obj
in bookArry) {

            Book *bk=[[Book
alloc]initWithId:[obj
objectForKey:@"-id"]
language:[obj
objectForKey:@"-language"]
name:[obj
objectForKey:@"name"]
author:[[obj
objectForKey:@"author" ]
objectForKey:@"name"]
price:[obj
objectForKey:@"price"]
summary:[obj
objectForKey:@"summary"]];
            [marr
addObject:bk];

            
        }

2、网络文件解析

  //解析网络数据

  //1.通过字符串初始化网址
  
NSURL *url=[NSURL
URLWithString:PATH2];

   //2.通过网络内容获取数据

  NSData *data2=[NSData
dataWithContentsOfURL:url];

3、将二进制数据转化为OC对象

 //4.遍历解析每一本书
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: