Xcode GData库解析XML

   Xcode IOS GData库解析XML      

IOS官方没有专门提供解析XML的库,所以需要借助第三方库来解析XML,这里介绍其中其中一种解析方法-----Google提供的在IOS平台上解析XML的开源库GDataXML,特点解析效率高,使用方便.下载地址:http://pan.baidu.com/s/1dD3st7F

  ps:iOS有解析xml的方法, http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project,但是效率低,使用不方便


1. 首先将下载的GData文件夹(里面包含GDataXmlNode.h和GDataXMLNode.m文件)拖拽到项目中,注意要选中"Copy items into destination group's folder",不要只是简单的引用

 

2.  选中项目根节点 --> 进入右边的Build Phases选项卡 --> 选第3个 (Link Binary With Libraries),点+号添加

 

   

    -->输入"libxml"搜索 --> 选中第2个(libxml2.dylib) --> Add

    

   

 

3. 选择"Build Settings"选项卡, 在搜索框中输入"gar",关闭ARC功能, 原因是GData库开发的比较早,不支持ARC 

    

 

4.  还是在"Build Settings"选项卡, 在搜索框中输入"header search",点第二个(Header Search Paths)右侧,弹出框中点+号,输入"usr/include/libxml2"

    

 

5.  还是在"Build Settings"选项卡, 在搜索框中输入"other linker",点第二个Other Linker Flags右侧,输入"-lxml2"

   

 

 到这里第三方库配置完成!

 

     //获取xml格式数据路径,文件扩展名不一定要xml, 只要里面的内容是xml格式就可以,但是文件中第一行一定要是<?xml version="1.0" encoding="utf-8"?> 不能有空白行,否则会报错

    NSString *strPath = [[NSBundle mainBundle] pathForResource:@"sns" ofType:@"txt"];

    

    //加载数据到内存中

    NSData *data = [NSData dataWithContentsOfFile:strPath];

    

    NSError *error= nil;

    //data原始数据格式转换为xml文档格式

    //xml文本数据转化为GDataXMLDocument类的对象

    //并且将xml文件转化为GDataXMLDocument内管理的树形内存数据

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

    NSLog(@"xml parse error = %@",error);

    

    //获得xml文件的根节点

    GDataXMLElement *rootElem = [doc rootElement];

    

    //获得根节点所有名字为count的节点,所有返回值为数组

    NSArray *arrayCount = [rootElem elementsForName:@"count"];

    //获得数组中的最后一个<count>节点,因为只有一个,所以arrayCount中只有一个元素

    GDataXMLElement *countElem = [arrayCount lastObject];

    

    //获得<count>节点的值

    NSString *strCount = [countElem stringValue];

    NSLog(@"<count> = %@",strCount);

    

    //获得唯一的<user_list>根节点

    GDataXMLElement *userListElem = [[rootElem elementsForName:@"user_list"] lastObject];

    

    //获得<user_list>根节点下的<user>子节点

    NSArray *arrayUser = [userListElem elementsForName:@"user"];

    

    //遍历<user_list>根节点下的5<user>节点

    for (GDataXMLElement *userElem in arrayUser)

    {

        NSMutableDictionary *dicUser = [[NSMutableDictionary alloc] init];

        

        // 获得<user>节点下的<username>节点

        GDataXMLElement *userName = [[userElem elementsForName:@"username"] lastObject];

        //取得<username>节点的值

        NSString *strUname = [userName stringValue];

        

        //获得<user>节点下的<realname>节点

        GDataXMLElement *userRealNameElem = [[userElem elementsForName:@"realname"] lastObject];

        //取得<realname>节点的值

        NSString *strRname = [userRealNameElem stringValue];

              //......

    } 

 转载请标明原文地址 http://www.cnblogs.com/chengfang/p/4122852.html

 

posted @ 2014-11-26 11:44  chengfang  阅读(639)  评论(0编辑  收藏  举报