IOS 网络浅析-(五 xml解析)
XML
- 可扩展标记语言
- 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
- 易读性高,编码手写难度小,数据量大
NSXMLParser解析方法
我们所用到的NSXMLParser是采用SAX方法解析
SAX(Simple API for XML)
- 只能读,不能修改,只能顺序访问,适合解析大型XML,解析速度快
- 常应用于处理大量数据的XML,实现异构系统的数据访问,实现跨平台
- 从文档的开始通过每一节点移动,定位一个特定的节点
DOM(Document Object Model)
- 不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,适合解析小型文档
- 一般应用与小型的配置XML,方便操作
- 为载入到内存的文档节点建立类型描述,呈现可横向移动、潜在巨大的树型结构
- 在内存中生成节点树操作代价昂贵
xmlParser解析过程
NSXMLParser解析过程
1.创建NSXMLParser实例,并传入从服务器接收的XML数据
2.定义解析器代理
3.解析器解析
4.通过解析代理方法完成XML数据的解析
使用XML解析文档时使用协议<NSXMLParserDelegate>,实现它的代理方法
// 1. 开始解析某个元素,会遍历整个XML,识别元素节点名称 - (void)parser:didStartElement:namespaceURI:qualifiedName:attributes: // 2. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次!为了节约内存开销 - (void)parser:foundCharacters: // 3. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息 - (void)parser:didEndElement:namespaceURI:qualifiedName: 注意:在解析过程中,上述三个方法会不停的重复执行,直到遍历完成为止 // 4. 开始解析XML文档 - (void)parserDidStartDocument: // 5. 解析XML文档结束 - (void)parserDidEndDocument: // 6. 解析出错 - (void)parser:parseErrorOccurred:
在XMLParser解析过程中,还需要实现NSXMLParserDelegate代理方法
如果一个XML文件中包含多个对象在解析过程中,为了能够正确解析中文档中的数据,需要注意一下几点:
1.当前解析出得是对象还是元素值?
如果是对象,需要判断当前对象时第几个,是第一个对象,还是第二、第三……,如果是第N个,需要将第N-1的对象值取出保存。
如果是元素值,需要将解析出得数据,赋值给对应于对象的某个属性。
2.在解析过程中,每次读取的是一个字符,所有必须实现字符串的拼接过程,将解析出字符进行组合。用来判断当前解析出得是对象,还是元素名。或元素值。
代码来啦———
//
// ViewController.m
// CX-XML解析
//
// Created by ma c on 16/3/18.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
// #import "ViewController.h" @interface ViewController ()<NSXMLParserDelegate> @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; NSURL * url = [NSURL URLWithString:@"http://192.168.1.200/train.xml"]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { //xml解析 NSXMLParser * parse = [[NSXMLParser alloc]initWithData:data]; parse.delegate = self; [parse parse]; }]; }
//打开文档
-(void)parserDidStartDocument:(NSXMLParser *)parser{ NSLog(@"打开文档,开始解析"); }
//开始查找起始标签
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ NSLog(@"开始元素:%@",elementName);
NSLog(@"属性%@",attributeDict); }
//获取标签内容
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"获取内容:%@",string); }
//查找结束标签
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ NSLog(@"结束标签:%@",elementName); }
//查找文档结束
-(void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"解析完成"); } /*
结果过长,截取部分。
2016-03-18 10:25:21.734 CX-XML解析[4043:238219] 打开文档,开始解析
2016-03-18 10:25:21.735 CX-XML解析[4043:238219] 开始元素:dataSet
2016-03-18 10:25:21.736 CX-XML解析[4043:238219] 属性{
xmlns = "http://WebXml.com.cn/";
}
2016-03-18 10:25:21.736 CX-XML解析[4043:238219] 获取内容: 2016-03-18 10:25:21.736 CX-XML解析[4043:238219] 开始元素:diffgr:diffgram
2016-03-18 10:25:21.737 CX-XML解析[4043:238219] 属性{
"xmlns:diffgr" = "urn:schemas-microsoft-com:xml-diffgram-v1";
"xmlns:msdata" = "urn:schemas-microsoft-com:xml-msdata";
}
2016-03-18 10:25:21.737 CX-XML解析[4043:238219] 获取内容: 2016-03-18 10:25:22.074 CX-XML解析[4043:238219] 结束标签:diffgr:diffgram
2016-03-18 10:25:22.074 CX-XML解析[4043:238219] 获取内容:
2016-03-18 10:25:22.074 CX-XML解析[4043:238219] 结束标签:dataSet 2016-03-18 10:25:22.074 CX-XML解析[4043:238219] 解析完成 */ @end
IOS 网络浅析-(五 xml解析)的更多相关文章
- iOS 网络编程:XML解析
1 XML文档结构 1.1 简介 XML 指可扩展标记语言(eXtensible Markup Language).XML 被设计用来传输和存储数据.其非常像HTML的标记语言,但与之不同的是,XML ...
- iOS网络请求之数据解析
JSON解析 IOS中Json解析的四种方法 NSURLConnection-网络请求浅析 IOS开发:官方自带的JSON使用 XML 解析 GDataXMLNode应用 IOS学习:常用第三方库(G ...
- IOS 网络浅析-(十三 SDWebImage 实用技巧)
IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...
- 网络数据的XML解析
网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了. 然后最近自己在做着玩一个ios的小应用,涉及网络数据的抓取 ...
- ios网络学习------8 xml格式数据的请求处理 用代码块封装
#pragma mark 载入xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从webserver载入数据 NSStri ...
- 初探iOS网络开发,数据解析。
通过大众点评平台开发来简单了解一下,oc的网络编程和数据解析(json) 首先我们需要到大大众点评开发者平台申请一个key.http://developer.dianping.com/app/tech ...
- 网络热恋之XML解析
XML 可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 易读性高,编码手写难度小,数据量大 NSXMLPars ...
- iOS网络编程笔记——XML文档解析
今天利用多余时间研究了一下XML文档解析,虽然现在移动端使用的数据格式基本为JSON格式,但是XML格式毕竟多年来一直在各种计算机语言之间使用,是一种老牌的经典的灵活的数据交换格式.所以我认为还是很有 ...
- IOS 网络浅析-(七 JSON解析之三方JSONKit)
在这个网络横行的时代......... 有没有小说的感觉,哈哈
随机推荐
- call方法和new对象的关系
call只能改变this的指向,而使用new对象不仅会自动调用call方法改变这个对象的this指向,而且还会继承构造函数的原型. var fn = function(a){ this.a = a; ...
- DDD:谈谈数据模型、领域模型、视图模型和命令模型
背景 一个类型可以充当多个角色,这个角色可以是显式的(实现了某个接口或基类),也可以是隐式的(承担的具体职责和上下文决定),本文就讨论四个角色:数据模型.领域模型.视图模型和命令模型. 四个角色 数据 ...
- SystemTap了解
SystemTrap是监控和跟踪运行中的Linux内核操作的动态方法. http://www.ibm.com/developerworks/cn/linux/l-systemtap/ 使用System ...
- Spring基础—— 泛型依赖注入
一.为了更加快捷的开发,为了更少的配置,特别是针对 Web 环境的开发,从 Spring 4.0 之后,Spring 引入了 泛型依赖注入. 二.泛型依赖注入:子类之间的依赖关系由其父类泛型以及父类之 ...
- 数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29046 Accepted: 7342 Case ...
- C#开源资源项目
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(as ...
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示
一直以来,都希望整合一个以客户为中心的平台,有两个方面的考虑:一是实现客户数据.客户关系.客户管理等方面的整合,以便更好利用好客户的相关资源,发挥最大的营销效益:二是整合目前我的开发框架的所有模块和技 ...
- Web前端测试题
JS题目: 在JavaScript中( )方法可以对数组元素进行排序. A. add()B. join()C. sort()D. length() 答案:http://hovertree.com/ti ...
- oracle中文显示为问号
在用PL/sql查询时,中文显示为问号.经查证,发现问题为oracle字符集不支持中文导致的.修改oracle字符集,改为支持中文即可. 方法: 第一步:修改注册表. 开始-运行-输入regedit- ...
- MVC中视图View向控制器传值的方法
MVC中视图View向控制器传值的方法步骤如下: 1.index页面: 页面中只需要一个触发事件的按钮