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)
在这个网络横行的时代......... 有没有小说的感觉,哈哈
随机推荐
- JS对象的几个方法介绍
1.hasOwnProperty 判断是不是对象自身的属性,如果是继承的返回false否则true function Fn(){ } Fn.prototype.num = 10; var obj = ...
- java中如何将JScrollPane的垂直滚动条自动移动到最下端
JPanel QQP = new JPanel(); JScrollPane jsp = new JScrollPane(QQP); JScrollBar jsb = jsp.getVerticalS ...
- LoRaWAN协议(三)--Server端数据协议
LoRaWAN Server 端架构 LoRaWAN 的server包括 NS(Network server).AS(application server).CS(Custom server).... ...
- [Solution] Microsoft Windows 服务(1) C#创建Windows服务
Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而 ...
- “康园圈--互联网+校园平台“项目之sprint1总结
一.团队成员 梁植淋,官郅豪,纪焓,詹耀海 二.目前进度 在全体组员的努力下,目前完成了项目的<设计方案书>.<功能需求书>.框架搭建.项目部署文档. 并成 ...
- AEAI CRM客户关系管理升级说明
本次发版的AEAI CRM_v1.5.1版本为AEAI CRM_v1.5.0版本的升级版本,该产品现已开源并上传至开源社区http://www.oschina.net/p/aeaicrm. 1 升级说 ...
- jQuery中的动画与特效
1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,简单介绍jQuery的显示和隐藏. <script type="text/javascript&q ...
- C#语法糖
首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕不已,呵呵. 1. ...
- 【Bootstrap基础学习】05 Bootstrap学习总结
好吧,Copy了几天,这个总结算是把我对Bootstrap的一些理解写一下吧. Bootstrap只是一套别人写好的前端框架,直接拿来用就好. 不过对于专业的前端而言,如果不去把所有的代码都看一遍来理 ...
- DotNetBar的初步使用
以前有用过SkinSharp和IrisSkin2皮肤控件来美化UI,简单易用,但不方便自定义.而DotNetBar功能很强大,不仅有Windows2007风格,更有Ribbon风格的界面效果.其效果演 ...