XML

  1. 可扩展标记语言
  2. 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
  3. 易读性高,编码手写难度小,数据量大

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.在解析过程中,每次读取的是一个字符,所有必须实现字符串的拼接过程,将解析出字符进行组合。用来判断当前解析出得是对象,还是元素名。或元素值。

具体实现代码:


#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

 

网络热恋之XML解析的更多相关文章

  1. 网络数据的XML解析

    网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了. 然后最近自己在做着玩一个ios的小应用,涉及网络数据的抓取 ...

  2. 网络热恋之json解析

    现在的app开发很少有用到XML解析的了,主流的则是JSON. // // ViewController.m // CX-JSON解析(三方JSONKit-master) #import " ...

  3. iOS 网络编程:XML解析

    1 XML文档结构 1.1 简介 XML 指可扩展标记语言(eXtensible Markup Language).XML 被设计用来传输和存储数据.其非常像HTML的标记语言,但与之不同的是,XML ...

  4. iOS网络请求之数据解析

    JSON解析 IOS中Json解析的四种方法 NSURLConnection-网络请求浅析 IOS开发:官方自带的JSON使用 XML 解析 GDataXMLNode应用 IOS学习:常用第三方库(G ...

  5. QF——网络之JSON解析和XML解析

    JSON解析和XML解析: 用苹果原生的代理方式的网络请求后返回的都是二进制数据(NSData). 若是json,则通过NSJSONSerialization把NSData数据转换为JSON对象. N ...

  6. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  7. IOS 网络浅析-(五 xml解析)

    XML 可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 易读性高,编码手写难度小,数据量大 NSXMLPars ...

  8. iOS开发之网络数据解析(二)--XML解析简介

    前言:本篇随笔介绍的是XML解析. 正文: 1.XML解析方式有2两种: DOM:一次性将整个XML数据加载进内存进行解析,比较适合解析小文件 SAX:从根元素开始,按顺序一个元素一个元素往下解析,比 ...

  9. iOS -数据库网络之xml解析之远程解析XML

    1.IOS中XML文件获取    //设置远程访问地址     NSURL *url=[NSURL URLWithString:@""];       //创建动态URL请求,并初 ...

随机推荐

  1. 最简单的pagging插件

    <html> <head> <title>jQuery Easy-Paging Test</title> </head> <body& ...

  2. 在_Layout模版中使用@Styles.Render()没有效果

    刚才有测试一个功能,就是在_Layout母版中使用了@Styles.Render()时行Render样式文件,所有在此母版下的视图均没有应用到样式,没有效果.是什么原因? 经查证资料,原来Insus. ...

  3. java实现可有括号的android计算器

    写了一个android版的计算器,可以计算带括号的表达式,不过前提是:正确的表达式才行 小缺陷是没有做表达式括号的控制,现在还没有想到好的控制方式 package javaAdvanced; impo ...

  4. 【UWP】FlipView绑定ItemsSource,Selectedindex的问题

    最近在做列表头部的Carousel展示,Carousel使用的是FlipView展示,另外使用ListBox显示当前页,如下图 我们先设置一个绑定的数据源 public class GlobalRes ...

  5. .NET框架体系结构

    刚开始接触.NET很疑惑,看完视频也不是太懂,通过总结和反复,从概括和概念入手,慢慢变得清晰了.这篇博客主要是我对.NET基础知识的了解,算作积累吧. .NET框架体系结构 由四个主要部分组成     ...

  6. 介绍开源的.net通信框架NetworkComms框架 源码分析(二十 )ConnectionCreate

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  7. jquery easyui 弹出消息框 (转载) jQuery EasyUI API 中文文档 - 消息框(Messager) http://www.cnblogs.com/hantianwei/archive/2012/03/19/2407113.html

    <html> <head> <!-- 导入easyui插件的js和css样式; --> <link rel="stylesheet" ty ...

  8. LGLTagsView

    做项目的时候经常会用到标签,比如说现在很多项目中搜索历史用标签展示 和 选择某个产品的不同属性用标签展示....网上的有很多封装好的标签,但是作为一个上进的程序员,都希望能有一个自己写的.其实也是一种 ...

  9. 使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转

    包名称:org.apache.commons.codec.binary 类名称:org.apache.commons.codec.binary.Hex 1.字节数组(byte[])转为十六进制(Hex ...

  10. 【HTML5】浅析html使用SSE(Server-Sent Events)连接JSP

    目录结构: // contents structure [-] 关于SSE的一些话 什么是SSE SSE的浏览器支持情况 SSE的工作机制 使用SSE连接JSP文件 HTMl页面 服务器端 错误 错误 ...