iOS中XML解析

iOS中XML解析分为两种实现方式:SAX与DOM
SAX方式:主要是事件驱动的解析方式,是逐行读取XML数据,不断回调代理,告诉代理当前解析的元素开始或者结束。
DOM解析方式:是讲整个XML数据全部读入内存,然后形成一颗树形结构,再根据元素的名称来读取相关的属性。
优缺点:
(1)SAX解析适合大型文件解析,对内存占用比较小,但是解析是采用事件驱动方式,因此代码比较零散复杂。
(2)DOM解析方式适合小型文件解析,代码实现非常简单,基本是按照元素名称来索引相关的属性。但是在解析大型文件的时候,由于是将XML数据全部读入内存,因此内存占用比较大。
1.下面首先介绍简单的DOM解析方式:使用google开源的GDataXML开源框架。
// 解析XML数据

    // 加载整个XML数据GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];// 获得文档的根元素 -- videos元素GDataXMLElement *root = doc.rootElement;// 获得根元素里面的所有video元素NSArray *elements = [root elementsForName:@"video"];// 遍历所有的video元素for (GDataXMLElement *videoElement in elements) {HMVideo *video = [[HMVideo alloc] init];// 取出元素的属性video.id = [videoElement attributeForName:@"id"].stringValue.intValue;video.length = [videoElement attributeForName:@"length"].stringValue.intValue;video.name = [videoElement attributeForName:@"name"].stringValue;video.image = [videoElement attributeForName:@"image"].stringValue;video.url = [videoElement attributeForName:@"url"].stringValue;// 添加到数组中[self.videos addObject:video];}

2.使用SAX方式解析XML数据使用的是苹果自带的解析框架NSXMLParser框架
// 解析XML数据

    // 1.创建XML解析器 -- SAX -- 逐个元素往下解析NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];// 2.设置代理parser.delegate = self;// 3.开始解析(同步执行)[parser parse];

pragma mark - NSXMLParser的代理方法–
/**
* 解析到文档的开头时会调用
*/
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
// NSLog(@”parserDidStartDocument—-“);
}

/**
* 解析到一个元素的开始就会调用
*
* @param elementName 元素名称
* @param attributeDict 属性字典
*/
- (void)parser:(NSXMLParser )parser didStartElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName attributes:(NSDictionary *)attributeDict
{
if ([@”videos” isEqualToString:elementName]) return;

HMVideo *video = [HMVideo videoWithDict:attributeDict];
[self.videos addObject:video];

}

/**
* 解析到一个元素的结束就会调用
*
* @param elementName 元素名称
*/
- (void)parser:(NSXMLParser )parser didEndElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName
{
// NSLog(@”didEndElement—-%@”, elementName);
}

/**
* 解析到文档的结尾时会调用(解析结束)
*/
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
// NSLog(@”parserDidEndDocument—-“);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果电脑基本设置+Linux 命令+Android 实战集锦

本文微信公众号「AndroidTraveler」首发。 背景 大多数应届毕业生在大学期间使用的比较多的是 windows 电脑,因此初入职场如果拿到一台苹果电脑,可能一时间不能够很快的上手。基于此,这边出了系列视频,通过实际的演示让没使用过苹…

iOS中POST请求

iOS中POST请求的发送需要使用NSMutableURLRequest可以设置URL request的头字段,比如超时时间,请求类型:GET POST等一些关键头字段: - (IBAction)login { // 1.用户名 NSString *usernameText self.username.text; if (userna…

发送JSON数据给服务器

需要将JSON格式的数据传送给服务器,注意需要设置: [request setValue:”application/json” forHTTPHeaderField:”Content-Type”]; Content-Type类型为:application/json // 1.URL NSURL *url [NSURL URLWithString:"http://localh…

Mac中AndroidStudio没有找到Plugins的问题

我们在windows中都可以正常找到plugins 但是在Mac上AndroidStudio里 setting打开却没有plugins 正准备在Mac上搞一下flutter呢 我感觉智商受到了侮辱! 这里其实是mac版本给我开了个玩笑 你可以按快捷键,你就可以找到 快捷键 command ‘,’ 没错就是comm…

进程和操作系统概述

进程和操作系统概述 进程的基础 程序和进程: 程序是一对静态的代码文件 进程是一个正在运行着的程序,抽象概念 进程由操作系统操控调用交于CPU运行 操作系统 1.管理控制协调计算机硬件和软件的关系 2.操作系统的作用? ​ 第一个作用&#xff…

iOS手势操作简介(一)

iOS中能够响应手势操作的类必须要继承自UIResponder,才能够处理手势响应操作。 默认继承了UIResponder的类有:UIApplication UIViewController UIView都继承自UIResponder. UIView是UIResponder的子类,可以实现下列4个方法处理不同的触摸事…

iOS开发中手势处理简介(二)

iOS中手势操作事件的产生于传递 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中 UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口&#x…

对前端Jenkins自动化部署的研究

1. 安装 安装 Nginx 1.1去官网下直接下载,解压缩 start nginx就可以使了,常用命令: start nginx # 启动 nginx -s reload # 修改配置后重新加载生效 nginx -s reopen # 重新打开日志文件 nginx -t # 配置文件检测是否正确 1.2 安装Jenkins…

python超神之路:Python3 列表list合并的4种方法

Python3 列表list合并的4种方法 方法1: 直接使用""号合并列表 aList [1,2,3] bList [www, pythontab.com] cList aList bList dList bList aList print(cList) print(dList) # 结果: [1, 2, 3, www, pythontab.com] [www, pythontab.com, 1, 2, 3] …

iOS手势操作简介(三)

监听触摸事件的做法 如果想监听一个view上面的触摸事件,之前的做法是 自定义一个view 实现view的touches方法,在方法内部实现具体处理代码 通过touches方法监听view触摸事件,有很明显的几个缺点 必须得自定义view 由于是在view内部的to…

iOS手势操作简介(四)

当事件传递到相应的UIResponder后,会首先调用: hitTest:withEvent: return (UIView *) UIApplication -> UIWindow 什么时候调用:当事件传递给一个控件的时候就会调用 作用:找最合适的viewhitTest:withEvent: return (UIView…

ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)...

在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入。 PS:本章将主要采用构造函数注入的方式,下一章将继续分享如何使之能够同…

iOS手势操作简介(五)

利用手势操作实现抽屉效果: 第一步:搭建UI (void)addChildView { // left UIView *leftView [[UIView alloc] initWithFrame:self.view.bounds]; leftView.backgroundColor [UIColor greenColor]; [self.view addSubview:leftView]; _leftView…

Java过滤器与SpringMVC拦截器之间的关系与区别

今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已…

iOS手势操作简介(六)

利用UIGestureRecognizer来对手势进行处理: interface HMViewController () property (weak, nonatomic) IBOutlet UIImageView *imagView; end implementation HMViewController (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup aft…

iOS并行程序开发- GCD NSOperationQueue(1)

import UIKit let imageURLs [“http://www.planetware.com/photos-large/F/france-paris-eiffel-tower.jpg“, “http://adriatic-lines.com/wp-content/uploads/2015/04/canal-of-Venice.jpg“, “http://algoos.com/wp-content/uploads/2015/08/ireland-02.jpg“, “http:…

二次幂权限设计

设置含有的权限如增删改查减为1,2,4,8,16 如果A包含增删改这5个权限,那A的值为1247 如果B包含增改查这5个权限,那A的值为14813 如果C包含增删改查减这5个权限,那A的值为12481631 7二进制为111,13的二进制为1101,31二进制为11111 1二进制为1&a…

最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。

#基于webpack构建的 Koa2 restful API 服务器脚手架这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6, 支持使用TypeScript编写。GIT地址:https://github.com/Allenzihan/koa2-mysql-framework.git此脚手架只安装了一些配合koa2使用的必要…

使用putty在linux主机和windows主机之间拷贝文件(已测试可执行)

转载于,请点击 首先下载putty,putty下载地址zip, 解压zip发现里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可执行文件,如果只是想要链接主机做一些操作那么使用putty.exe,要想要上传 …

博客园在升级的路上,不妨更自信些,同时说说我们可以为博客园做些什么

最近,博客园在技术升级上做了积极向上的努力,虽然中间过程出现反复,但姑且先不论最终升级后客户体验方面的提升,在升级过程中探索排查问题和解决问题的过程,本身就能帮助博客园团队和广大用户积累经验和提升能力&#…