解析 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是Google提供的用于XML数据处理的类集。该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且支持XPath语法。
- <root>
- <name value="wusj"/>
- <age>24</age>
- </root>
- NSString *xmlPath = [[NSBundlemainBundle] pathForResource:@"test"ofType:@"xml"];
- NSString *xmlString = [NSStringstringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncodingerror:nil];
- GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithXMLString:xmlString options:0 error:nil];
- GDataXMLElement *xmlEle = [xmlDoc rootElement];
- NSArray *array = [xmlEle children];
- NSLog(@"count : %d", [array count]);
- for (int i = 0; i < [array count]; i++) {
- GDataXMLElement *ele = [array objectAtIndex:i];
- // 根据标签名判断
- if ([[ele name] isEqualToString:@"name"]) {
- // 读标签里面的属性
- NSLog(@"name --> %@", [[ele attributeForName:@"value"] stringValue]);
- } else {
- // 直接读标签间的String
- NSLog(@"age --> %@", [ele stringValue]);
- }
- }
//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];
}
IOS学习:常用第三方库(GDataXMLNode:xml解析库)的更多相关文章
-
GDataXMLNode:xml解析库
IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...
-
iOS开发-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...
-
EXPAT(XML解析库)
一.简介 expat是一个由C语言编写的XML解析库.James Clark创建了这个库,现在是制定XML标准的W3组织的技术leader.现在的版本是2.0.2.0开始就由Clark Cooper领 ...
-
iOS开发常用第三方库
UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...
-
iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)--(转)
图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下 ...
-
IOS开发之路三(XML解析之KissXML的使用)
最近再做一个项目需要用到xml的解析.今天查了一些资料自己做了一个小demo.纯OC没有界面.. 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用 ...
-
IOS开发之路三(XML解析之GDataXML的使用)
最近再做一个项目需要用到xml的解析.今天查了一些资料自己做了一个小demo.纯OC没有界面.. 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用 ...
-
Swift XML解析库 - SwiftyXMLParser
经过在CocoaPods中筛选以后,发这个这个比较好用,整理出来 如果有需要可以在Pods命令端输入: pod search xml 这样会搜索出很多相关Xml的第三方库 SwiftyXMLParse ...
-
iOS开发常用第三方框架
1.网络通信 1.ASIHTTPRequest 这是一个经典的老库,功能完全而强大,但已经停止更新很久了(iOS5.0停止更新,但是我最近看github上这个项目有新改动).在不同iOS版本上略微有一 ...
随机推荐
-
记录同事的一个bug-ajax-413错误-fullhead
症状表现为在form下面的textarea里的字符数只有几十个的时候,请求可以成功,但是如果有几百字,则会出现413错误,提示fullhead,我第一反应是cookie体积太小,但是清了缓存还是一样的 ...
-
VIM编辑器常用命令
一.剪切: 1. 欲从当前光标删除至下一个单词,请输入:dw 2. 欲从当前光标删除至当前行末尾,请输入:d$ 3. 欲删除整行,请输入:dd //可以使用 dNd删除多行 N代表行数 4. 欲 ...
-
Visio连接数据表实体外键[快捷记录]
打开数据库模型图. 单击“常用”工具栏上的“连接线”工具. 将“连接线”工具放在父表的中心上,使表的四周出现轮廓线,然后拖到子表的中心.当子表出现轮廓线时,松开鼠标按钮. 两个连接点均变为红色,同时父 ...
-
读书笔记——OpenGL超级宝典
对于某些函数的理解 glClear和glClearColor glClearColor指定glClear清除特定缓冲区时使用的值. glFlush 让所有已发送的命令尽快的由实际的绘制引擎执行. gl ...
-
c#让窗体永在最前 调用windows api 将窗体设为topmost
有时候应用程序需要将一个窗体始终位于屏幕的最前面,即使切换到其它窗体也能看到该窗体,这样的窗体就叫做TopMost窗体. 用C#制作TopMost窗体之前,首先要了解如何声明SetWindowPos函 ...
-
Nginx负载均衡(架构之路)
[前言] 在大型网站中,负载均衡是有想当必要的.尤其是在同一时间访问量比较大的大型网站,例如网上商城,新闻等CMS系统,为了减轻单个服务器的处理压力,我们引进了负载均衡这一个概念,将一个服务器的压力分 ...
-
【转】RPC介绍
转自:http://www.cnblogs.com/Vincentlu/p/4185299.html 摘要: RPC——Remote Procedure Call Protocol,这是广义上的解释, ...
-
机器学习算法 Python&;R 速查表
sklearn实战-乳腺癌细胞数据挖掘( 博主亲自录制) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
-
tensorflow实现RNN及Word2Vec
参考:<tensorflow实战> 首先介绍一下Word2Vec Word2Vec:从原始语料中学习字词空间向量的预测模型.主要分为CBOW(Continue Bags of Words) ...
-
2017CCPC秦皇岛 L题One-Dimensional Maze&;&;ZOJ3992【模拟】
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3992 题意: 走迷宫,一个一维字符串迷宫,由'L'.'R'组成,分别 ...