欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS开发中常见的解析XML的类库以及简要安装方法

程序员文章站 2022-05-16 11:35:39
在iphone开发中,xml的解析有很多选择,ios sdk提供了nsxmlparser和libxml2两个类库,另外还有很多第三方类库可选,例如tbxml、touchxm...

在iphone开发中,xml的解析有很多选择,ios sdk提供了nsxmlparser和libxml2两个类库,另外还有很多第三方类库可选,例如tbxml、touchxml、kissxml、tinyxml和gdataxml。问题是应该选择哪一个呢?
解析 xml 通常有两种方式,dom 和 sax:
dom解析xml时,读入整个xml文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意xml节点,读取它的属性和值。而且通常情况下,可以借助xpath,直接查询xml节点。
sax解析xml,是基于事件通知的模式,一边读取xml文档一边处理,不必等整个文档加载完之后才采取操作,当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理。
一般在ios平台下,比较常用的xml解析类库有如下几种:
nsxmlparser,http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/classes/nsxmlparser_class/reference/reference.html ,这是一个sax方式解析xml的类库,默认包含在ios sdk中,使用也比较简单。
libxml2,http://xmlsoft.org/,是一套默认包含在ios sdk中的开源类库,它是基于c语言的api,所以使用起来可能不如nsxml方便。这套类库同时支持dom和sax解析,libxml2的sax解析方式还是非常酷的,因为它可以边读取边解析,尤其是在从网上下载一个很大的xml文件,就可以一边下载一边对已经下载好的内容进行解析,极大的提高解析效率。
tbxml,http://www.tbxml.co.uk/tbxml/tbxml_free.html,这是一套轻量级的dom方式的xml解析类库,有很好的性能和低内存占用,不过它不对xml格式进行校验,不支持xpath,并且只支持解析,不支持对xml进行修改。
touchxml,https://github.com/touchcode/touchxml,这也是一套dom方式的xml解析类库,支持xpath,不支持xml的修改。
kissxml,http://code.google.com/p/kissxml/,这是一套基于touchxml的xml解析类库,和touchxml相比,支持了xml的修改。
tinyxml,http://www.grinninglizard.com/tinyxml/,这是一套小巧的基于c语言的dom方式进行xml解析的类库,支持对xml的读取和修改,不直接支持xpath,需要借助另一个相关的类库tinyxpath才可以支持xpath。
gdataxml,http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/source/xmlsupport/,这是一套google开发的dom方式xml解析类库,支持读取和修改xml文档,支持xpath方式查询。
那么对于如何在项目中选择合适的xml解析类库呢?网上已经有人对这几款xml类库做过分析和对比,可参考《how to choose the best xml parser for your iphone project》http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project 一文,基本比较准确和客观,文中建议:
如果是读取很小的xml文档,性能基本上没有什么差别,不过从调用的方便性来说,建议使用touchxml、kissxml或gdataxml
如果是需要读取和修改xml文档,建议使用kissxml或gdataxml
如果需要读取非常大的xml文档,则建议使用libxml2或tbxml
如果你不想去调用第三方类库,那么使用nsxml也可以

安装说明
gdataxml
1. 从http://code.google.com/p/gdata-objectivec-client/downloads/list下载“gdata-objective-c client library.”
2. 解压缩文件,找到source\xmlsupport,并且将其中的gdataxmlnode.h 和 gdataxmlnode.m文件拖到项目中
3. 选中项目,选中“build settings”标签页
4. 将build settings页中,顶部的“basic”标签切换到“all”
5. 找到“paths\header search paths”项,并添加“/usr/include/libxml2”到列表中
6. 找到“linking\other linker flags”项,并添加“-lxml2”到列表中

iOS开发中常见的解析XML的类库以及简要安装方法

在需要调用gdataxml的代码文件头部,加入:

复制代码 代码如下:
#import “gdataxmlnode.h”

touchxml
1. 从https://github.com/touchcode/touchxml下载最新touchxml源码
2. 解压后,将其中的sources目录下的文件和目录都拖到项目中
3. 选中项目,选中“build settings”标签页
4. 将build settings页中,顶部的“basic”标签切换到“all”
5. 找到“paths\header search paths”项,并添加“/usr/include/libxml2”到列表中
6. 找到“linking\other linker flags”项,并添加“-lxml2”到列表中
在需要调用touchxml的代码文件头部,加入:

复制代码 代码如下:
#import “touchxml.h”

tbxml
1. 从http://www.tbxml.co.uk/tbxml/tbxml_free.html下载最新tbxml源码
2. 解压后,将其中的tbxml.h, tbxml.m, nsdataadditions.h和nsdataaddtions.m四个文件拖到项目中
3. 添加对libz.dylib类库的应用
在需要调用tbxml的代码文件头部,加入:
复制代码 代码如下:
#import “tbxml.h”


使用说明
gdataxml
读取xml文件,并解析成为dom文档对象示例:

复制代码 代码如下:

nsstring *filepath = [[nsbundle mainbundle] pathforresource:@"test" oftype:@"xml"]; 
nsdata *xmldata = [[nsmutabledata alloc] initwithcontentsoffile:filepath]; 
nserror *error; 
gdataxmldocument *doc = [[gdataxmldocument alloc] initwithdata:xmldata options:0 error:&error]; 
if (doc == nil) { return nil; } 
nslog(@"%@", doc.rootelement); 
[doc release]; 
[xmldata release];