IOS学习:常用第三方库(GDataXMLNode:xml解析库)

解析 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方式查询。

一、GDataXMLNode说明
 

GDataXMLNode是Google提供的用于XML数据处理的类集。该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且支持XPath语法。

 
使用方法:
     1、获取GDataXMLNode.h/m文件,将GDataXMLNode.h/m文件添加到工程中
     2、向工程中增加“libxml2.dylib”库
     3、在工程的“Build Settings”页中找到“Header Search Path”项,添加/usr/include/libxml2"到路径中
     4、添加“GDataXMLNode.h”文件到头文件中,如工程能编译通过,则说明GDataXMLNode添加成功
 
二、GDataXMLNode示例
 
示例:
[html] view plaincopy
  1. <root>
  2. <name value="wusj"/>
  3. <age>24</age>
  4. </root>
 
对此xml文件进行解析
 
[cpp] view plaincopy
  1. NSString *xmlPath = [[NSBundlemainBundle] pathForResource:@"test"ofType:@"xml"];
  2. NSString *xmlString = [NSStringstringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncodingerror:nil];
  3. GDataXMLDocument *xmlDoc = [[GDataXMLDocument  alloc]  initWithXMLString:xmlString  options:0  error:nil];
  4. GDataXMLElement *xmlEle = [xmlDoc rootElement];
  5. NSArray *array = [xmlEle children];
  6. NSLog(@"count : %d", [array count]);
  7. for (int i = 0; i < [array count]; i++) {
  8. GDataXMLElement *ele = [array objectAtIndex:i];
  9. // 根据标签名判断
  10. if ([[ele name] isEqualToString:@"name"]) {
  11. // 读标签里面的属性
  12. NSLog(@"name --> %@", [[ele attributeForName:@"value"] stringValue]);
  13. } else {
  14. // 直接读标签间的String
  15. NSLog(@"age --> %@", [ele stringValue]);
  16. }
  17. }
 
    运行结果:
        
    
 
三、GDataXMLNode方法小结
 
     最终的数据读出都是在GDataXMLElement对象中读出的,以下方法均为GDataXMLElement类的方法
     1、name方法,取标签名 e.g name标签的名称“name”
     2、attributeForName: 取属性结点 再调stringValue即可取到属性值 e.g name标签中的value属性
     3、stringValue: 取标签间的字符串值  e.g: age间的24

//DOM 解析

- (IBAction)dommethord:(id)sender {

//1,拿到文件

NSString *path = [[NSBundle mainBundle] pathForResource:@"xml" ofType:@"txt"];

//2,根据路径拿到数据

NSData *data = [NSData dataWithContentsOfFile:path];

//3,创建解析对象

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

//4,获取根

GDataXMLElement *rootElement = document.rootElement;

//初始化数组

_allDataMutaArray = [NSMutableArray array];

_allDataMutaString = [NSMutableString string];

//5,获取根节点下的 所有子节点

NSArray *stuArrayElement = rootElement.children;

//6,遍历每一个Student

for (GDataXMLElement *stuElement in stuArrayElement) {

//每遍历一次就 创建一个模型

Student *stu = [Student new];

//7,遍历子节点

for (GDataXMLElement *stuSubElement in stuElement.children) {

//8,使用KVC的方式 对模型对象进行复制

[stu setValue:stuSubElement.stringValue forKey:stuSubElement.name];

//打印

NSLog(@"%@ %@ ",stuSubElement.name,stuSubElement.stringValue);

[_allDataMutaString appendString:stuSubElement.stringValue];

}

//将添加好的模型放入数组中

[_allDataMutaArray addObject:stu];

[stu release];

NSLog(@"----%lu",stu.retainCount);

}

NSLog(@" 数据项  %@",_allDataMutaArray);

_textFieldView.text = _allDataMutaString;

[document release];

}

转载于:https://www.cnblogs.com/iOS-mt/p/4172059.html

IOS学习:常用第三方库(GDataXMLNode:xml解析库)相关推荐

  1. iOS开发 常用第三方开源框架

    iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报 开源框架 图像: 1.图片浏览控件MWPhotoBrowse ...

  2. iOS开发常用第三方开源框架

    iOS开发-常用第三方开源框架倾情整理!简书:https://www.jianshu.com/p/29cb22b13d79 iOS第三方库大全:https://blog.csdn.net/kanggu ...

  3. 常用的python命令行解析库

    常用的python命令行解析库,这儿介绍3种: 1.argparse 2.click 3.fire argparse是python自带的模块,要经历解析器初始化.参数定义.解析一套流程,使用起来有些繁 ...

  4. Linux下ACE、xml解析库开发环境搭建

    一.安装环境   1.安装vmware12.0版本 2.安装centos6.6的镜像文件 3.安装vmare_tool工具(方便虚拟机与实体机的切换) 4.配置网络      虚拟机网络连接方式:桥接 ...

  5. viper4android io错误,golang常用库之配置文件解析库-viper使用详解

    一.viper简介 viper 配置管理解析库,是由大神 Steve Francia 开发,他在google领导着 golang 的产品开发,他也是 gohugo.io 的创始人之一,命令行解析库 c ...

  6. iOS开发常用第三方库

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  7. ios framework 调用第三方 framework_Python基础:标准库和常用的第三方库

    Python的标准库有: 名称 作用 datetime 为日期和时间处理同时提供了简单和复杂的方法. zlib 直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 ta ...

  8. iOS之常用第三方库的介绍

    因为iOS SDK相对比较底层,所以开发者就得受累多做一些体力活.不过幸运的是,有很多第三方的类库可以用来简化很多不必要的工作. (1)AFNetworking 目前比较推荐的iOS网络请求组件,默认 ...

  9. xml解析库对比总结(解析方式,第三方库,TinyXml)

    一. 解析方式 xml的2种解析方式(DOM和SAX解析方式): https://blog.csdn.net/weixin_42472048/article/details/81264570 dom解 ...

最新文章

  1. C# 多个异步方法的异常处理
  2. grasshopper_如何使用Google的Grasshopper编码应用程序来学习手机上的编码基础知识...
  3. windows下安装mongodb4.x版本
  4. linux命令大全-比较常用的
  5. 《IT项目管理》读书笔记(1) —— 概述
  6. 贪吃蛇游戏设计汇报c语言,贪吃蛇游戏设计报告(C++).doc
  7. Python-Cartopy制图学习01-中国区域SPEI空间制图
  8. excel随机数_Excel生成随机数、不重复随机数技巧,试验检测办公必备
  9. 键盘选中一行或多行的快捷键
  10. 技术部岗位职责——技术总监
  11. android 应用市场图尺寸,【干货】最新App应用市场截图尺寸大全
  12. 我总结了程序员转行得最有出路5个方向
  13. LaTeX数学公式的输入
  14. 正则表达式验证系统登录密码必须由字母数字和特殊符号组成
  15. 五十音图平假名随机生成
  16. vue-amap实现实现初始化并定位当前位置,搜索,定位,增加点标记
  17. Rockchip rv1126平台在gstreamer1中添加OpenCv实现视频流负片的效果
  18. SpringBoot2.0日志配置实例
  19. vivoS7e和vivoS6哪个好(参数对比还是新机优势大)
  20. 电力电子:单项逆变器设计(MATLAB程序+AD原理图)

热门文章

  1. vuecli3+webpack4优化实践(删除console.log和配置dllPlugin)
  2. PropertyGrid控件 分类(Category)及属性(Property)排序
  3. PHP解决方案@时间差异计算函数
  4. javascript函数,值得参考!
  5. 度量相似性数学建模_一种基于粒子群位置更新思想灰狼优化算法的K-Means文本分类方法与流程...
  6. 清华大学《操作系统》(十八):管程于信号量
  7. python 消息队列 get是从队首还是队尾取东西_从零开始Python对redis作为消息队列的使用...
  8. 如何使用CppUnit进行单元测试
  9. eigen 列向量转矩阵_快速入门矩阵运算——开源库Eigen
  10. java打印的globa类l_Spring异常集中处理和日志集中打印