zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第十三章 部署Java应用程序
    分布式系列五: RMI通信
    分布式系列四: HTTP及HTTPS协议
    分布式系列三: 对象序列化
    程序中的 “负数取模” 问题
    【转】Linux C函数库参考
    【转】 Linux中记录终端输出到txt文本文件
    【转】 #define用法详解
    error: ‘to_string’ was not declared in this scope
    exit() 与 return() 的区别
  • 原文地址:https://www.cnblogs.com/chengfang/p/4122852.html
Copyright © 2011-2022 走看看