转载自:http://blog.csdn.net/tangren03/article/details/7868246

在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高、使用上更方便,关于IOS平台各种解析XML库的优缺点分析,可以看下这篇文章:http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

这里主要介绍一下由Google提供的一种在IOS平台上进行XML解析的开源库GDataXML,可以到http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/下载源码,下载下来后进入文件夹找到XMLSupport文件夹,将里面的GDataXMLNode.h和GDataXMLNode.m文件拖拽到项目中新建的文件夹即可(我这里是建的GDataXML文件夹),注意要选中复制文件到项目中而不是只是引用,如图:

然后就是对工程进行一些配置,点击工程根目录然后点击左边的Target,进入Build Phases,然后点击第三个Link binary with libraries,点击加号搜索libxml2并将这个库添加到工程,如图:

接下来再进入Build Settings,在搜索框中搜索Head Search Path,然后双击并点击+按钮添加/usr/include/libxml2,如图:

接下来再搜索框中搜索Other linker flags,同样的方式添加-lxml2,如图:

到这里,添加和配置的工作就完成了(是有点麻烦),接下来就看如何使用了:

首先在工程中新建一个xml文件,作为我们要解析的对象,新建方法是在工程中新建一个Empty的文件,命名为users.xml,然后添加内容:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Users>
  3. <User id="001"]]>
  4. <name>Ryan</name>
  5. <age>24</age>
  6. </User>
  7. <User id="002"]]>
  8. <name>Tang</name>
  9. <age>23</age>
  10. </User>
  11. </Users>
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Users>
  3. <User id="001"]]>
  4. <name>Ryan</name>
  5. <age>24</age>
  6. </User>
  7. <User id="002"]]>
  8. <name>Tang</name>
  9. <age>23</age>
  10. </User>
  11. </Users>

接下来就可以开始解析了,在需要解析的文件中引入头文件:#import"GDataXMLNode.h"

我是新建的一个Empty工程,所以直接在AppDelegate.m中使用,代码如下:

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. self.window = [[[UIWindowalloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
  4. // Override point for customization after application launch.
  5. self.window.backgroundColor = [UIColorwhiteColor];
  6. [self.windowmakeKeyAndVisible];
  7. //获取工程目录的xml文件
  8. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];
  9. NSData *xmlData = [[NSData alloc] initWithContentsOfFile:filePath];
  10. //使用NSData对象初始化
  11. GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData  options:0error:nil];
  12. //获取根节点(Users)
  13. GDataXMLElement *rootElement = [doc rootElement];
  14. //获取根节点下的节点(User)
  15. NSArray *users = [rootElement elementsForName:@"User"];
  16. for (GDataXMLElement *user in users) {
  17. //User节点的id属性
  18. NSString *userId = [[user attributeForName:@"id"] stringValue];
  19. NSLog(@"User id is:%@",userId);
  20. //获取name节点的值
  21. GDataXMLElement *nameElement = [[user elementsForName:@"name"] objectAtIndex:0];
  22. NSString *name = [nameElement stringValue];
  23. NSLog(@"User name is:%@",name);
  24. //获取age节点的值
  25. GDataXMLElement *ageElement = [[user elementsForName:@"age"] objectAtIndex:0];
  26. NSString *age = [ageElement stringValue];
  27. NSLog(@"User age is:%@",age);
  28. NSLog(@"-------------------");
  29. }
  30. returnYES;
  31. }
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. self.window = [[[UIWindowalloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
  4. // Override point for customization after application launch.
  5. self.window.backgroundColor = [UIColorwhiteColor];
  6. [self.windowmakeKeyAndVisible];
  7.  
  8. //获取工程目录的xml文件
  9. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];
  10. NSData *xmlData = [[NSData alloc] initWithContentsOfFile:filePath];
  11.  
  12. //使用NSData对象初始化
  13. GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0error:nil];
  14.  
  15. //获取根节点(Users)
  16. GDataXMLElement *rootElement = [doc rootElement];
  17.  
  18. //获取根节点下的节点(User)
  19. NSArray *users = [rootElement elementsForName:@"User"];
  20.  
  21. for (GDataXMLElement *user in users) {
  22. //User节点的id属性
  23. NSString *userId = [[user attributeForName:@"id"] stringValue];
  24. NSLog(@"User id is:%@",userId);
  25.  
  26. //获取name节点的值
  27. GDataXMLElement *nameElement = [[user elementsForName:@"name"] objectAtIndex:0];
  28. NSString *name = [nameElement stringValue];
  29. NSLog(@"User name is:%@",name);
  30.  
  31. //获取age节点的值
  32. GDataXMLElement *ageElement = [[user elementsForName:@"age"] objectAtIndex:0];
  33. NSString *age = [ageElement stringValue];
  34. NSLog(@"User age is:%@",age);
  35. NSLog(@"-------------------");
  36. }
  37.  
  38. returnYES;
  39. }

编译执行在控制台输出结果如下:

使用GDataXML解析XML文档的更多相关文章

  1. Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)

    使用GDataXML解析XML文档 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高.使用上更方便 这里主要介绍一下 ...

  2. ios中GDataXML解析XML文档

    参考文章 http://blog.csdn.net/ryantang03/article/details/7868246 适合解析一个节点多个属性要用GDataXml 格式如下 <?xml ve ...

  3. IOS学习笔记27—使用GDataXML解析XML文档

    http://blog.csdn.net/ryantang03/article/details/7868246

  4. 网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档,视频项目

    小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心: ...

  5. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  6. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  7. java解析xml文档(dom)

    DOM解析XML文档 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件 ...

  8. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

  9. DOM生成XML文档与解析XML文档(JUNIT测试)

    package cn.liuning.test; import java.io.File; import java.io.IOException; import javax.xml.parsers.D ...

随机推荐

  1. Java克隆--深克隆与浅克隆的区别

    克隆,就是复制一个对象的副本,而克隆又分浅克隆和深克隆.浅克隆是指克隆得到的对象基本类型的值改变了,而源对象的值不会变.但如果被克隆对象引用类型的值改变了,那么源对象的值同样会改变,因为引用类型在栈内 ...

  2. git 删除已经 add 的文件

    使用 git rm 命令即可,有两种选择, 一种是 git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除: 一种是 git rm --f " ...

  3. Ubuntu14.04 搭建 node.js 环境(Binaries方式)

    从官网下载 http://nodejs.org/download/ Linux Binaries (.tar.gz)  下载下来的是node-v0.10.29-linux-x64.tar.gz文件 解 ...

  4. CentOS 7 使用外部邮箱 发送邮件和附件—mail,mailx

    1.查看软件包是否安装 [root@localhost ~]# rpm -qa|grep mail mailx-12.5-12.el7_0.x86_64 javamail-1.4.6-8.el7.no ...

  5. js中Math()函数&&数据类型转换

    Math()函数: x的y次方:Math.pow(x,y) 取小数点后两位:num.toFixed(2) 数据类型转换: 字符串转换为数字:parseInt(num)转换为整数:parseFloat( ...

  6. nfa转dfa,正式完成

    为了加速转换的处理,我压缩了符号表.具体算法参考任何一本与编译或者自动机相关的书籍. 这里的核心问题是处理传递性闭包,transitive closure,这个我目前采取的是最简单的warshall算 ...

  7. 转: ffmpeg 的deom列表

    http://blog.csdn.net/leixiaohua1020/article/details/47072861

  8. Android Bitmap详细介绍(转)

    转自: Bitmap详细介绍 package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; imp ...

  9. 数理方程:Fourier变换与卷积

    更新:1 APR 2016 关于傅里叶级数参看数理方程:Fourier级数 Fourier变换: 对于满足Dirichlet条件的函数\(f(t)\)在其连续点处定义 \(F(\omega)=\int ...

  10. PowerDesigner的数据类型

    用PowerDesigner 15 设计个数据库,每个字段的数据类型设计真是头大,根据字段意思看用哪个类型最合适还得仔细研究呀.贴几个数据类型表格收藏一下^_^ Numeric data types ...