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. // 1. 开始解析某个元素,会遍历整个XML,识别元素节点名称
  2.  
  3. - (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:
  4.  
  5. // 2. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次!为了节约内存开销
  6.  
  7. - (void)parser:foundCharacters:
  8.  
  9. // 3. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息
  10.  
  11. - (void)parser:didEndElement:namespaceURI:qualifiedName:
  12.  
  13. 注意:在解析过程中,上述三个方法会不停的重复执行,直到遍历完成为止
  14.  
  15. // 4. 开始解析XML文档
  16.  
  17. - (void)parserDidStartDocument:
  18.  
  19. // 5. 解析XML文档结束
  20.  
  21. - (void)parserDidEndDocument:
  22.  
  23. // 6. 解析出错
  24.  
  25. - (void)parser:parseErrorOccurred:

在XMLParser解析过程中,还需要实现NSXMLParserDelegate代理方法

如果一个XML文件中包含多个对象在解析过程中,为了能够正确解析中文档中的数据,需要注意一下几点:

1.当前解析出得是对象还是元素值?

如果是对象,需要判断当前对象时第几个,是第一个对象,还是第二、第三……,如果是第N个,需要将第N-1的对象值取出保存。

如果是元素值,需要将解析出得数据,赋值给对应于对象的某个属性。

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

代码来啦———

  1. //
  2. // ViewController.m
  3. // CX-XML解析
  4. //
  5. // Created by ma c on 16/3/18.
  6. // Copyright © 2016年 xubaoaichiyu. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10.  
  11. @interface ViewController ()<NSXMLParserDelegate>
  12.  
  13. @end
  14.  
  15. @implementation ViewController
  16.  
  17. - (void)viewDidLoad {
  18. [super viewDidLoad];
  19.  
  20. NSURL * url = [NSURL URLWithString:@"http://192.168.1.200/train.xml"];
  21.  
  22. NSURLRequest * request = [NSURLRequest requestWithURL:url];
  23.  
  24. [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
  25.  
  26. //xml解析
  27.  
  28. NSXMLParser * parse = [[NSXMLParser alloc]initWithData:data];
  29.  
  30. parse.delegate = self;
  31.  
  32. [parse parse];
  33.  
  34. }];
  35.  
  36. }
  37. //打开文档
  38. -(void)parserDidStartDocument:(NSXMLParser *)parser{
  39.  
  40. NSLog(@"打开文档,开始解析");
  41.  
  42. }
  43. //开始查找起始标签
  44. -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
  45.  
  46. NSLog(@"开始元素:%@",elementName);
  47. NSLog(@"属性%@",attributeDict);
  48.  
  49. }
  50. //获取标签内容
  51. -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
  52.  
  53. NSLog(@"获取内容:%@",string);
  54.  
  55. }
  56. //查找结束标签
  57. -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
  58.  
  59. NSLog(@"结束标签:%@",elementName);
  60.  
  61. }
  62. //查找文档结束
  63. -(void)parserDidEndDocument:(NSXMLParser *)parser{
  64.  
  65. NSLog(@"解析完成");
  66.  
  67. }
  68.  
  69. /*
  70. 结果过长,截取部分。
  71. 2016-03-18 10:25:21.734 CX-XML解析[4043:238219] 打开文档,开始解析
  72. 2016-03-18 10:25:21.735 CX-XML解析[4043:238219] 开始元素:dataSet
  73. 2016-03-18 10:25:21.736 CX-XML解析[4043:238219] 属性{
  74. xmlns = "http://WebXml.com.cn/";
  75. }
  76. 2016-03-18 10:25:21.736 CX-XML解析[4043:238219] 获取内容:
  77.  
  78. 2016-03-18 10:25:21.736 CX-XML解析[4043:238219] 开始元素:diffgr:diffgram
  79. 2016-03-18 10:25:21.737 CX-XML解析[4043:238219] 属性{
  80. "xmlns:diffgr" = "urn:schemas-microsoft-com:xml-diffgram-v1";
  81. "xmlns:msdata" = "urn:schemas-microsoft-com:xml-msdata";
  82. }
  83. 2016-03-18 10:25:21.737 CX-XML解析[4043:238219] 获取内容:
  84.  
  85. 2016-03-18 10:25:22.074 CX-XML解析[4043:238219] 结束标签:diffgr:diffgram
  86. 2016-03-18 10:25:22.074 CX-XML解析[4043:238219] 获取内容:
  87. 2016-03-18 10:25:22.074 CX-XML解析[4043:238219] 结束标签:dataSet
  88.  
  89. 2016-03-18 10:25:22.074 CX-XML解析[4043:238219] 解析完成
  90.  
  91. */
  92.  
  93. @end

IOS 网络浅析-(五 xml解析)的更多相关文章

  1. iOS 网络编程:XML解析

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

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

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

  3. IOS 网络浅析-(十三 SDWebImage 实用技巧)

    IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...

  4. 网络数据的XML解析

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

  5. ios网络学习------8 xml格式数据的请求处理 用代码块封装

    #pragma mark 载入xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从webserver载入数据 NSStri ...

  6. 初探iOS网络开发,数据解析。

    通过大众点评平台开发来简单了解一下,oc的网络编程和数据解析(json) 首先我们需要到大大众点评开发者平台申请一个key.http://developer.dianping.com/app/tech ...

  7. 网络热恋之XML解析

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

  8. iOS网络编程笔记——XML文档解析

    今天利用多余时间研究了一下XML文档解析,虽然现在移动端使用的数据格式基本为JSON格式,但是XML格式毕竟多年来一直在各种计算机语言之间使用,是一种老牌的经典的灵活的数据交换格式.所以我认为还是很有 ...

  9. IOS 网络浅析-(七 JSON解析之三方JSONKit)

    在这个网络横行的时代......... 有没有小说的感觉,哈哈

随机推荐

  1. JS对象的几个方法介绍

    1.hasOwnProperty 判断是不是对象自身的属性,如果是继承的返回false否则true function Fn(){ } Fn.prototype.num = 10; var obj = ...

  2. java中如何将JScrollPane的垂直滚动条自动移动到最下端

    JPanel QQP = new JPanel(); JScrollPane jsp = new JScrollPane(QQP); JScrollBar jsb = jsp.getVerticalS ...

  3. LoRaWAN协议(三)--Server端数据协议

    LoRaWAN Server 端架构 LoRaWAN 的server包括 NS(Network server).AS(application server).CS(Custom server).... ...

  4. [Solution] Microsoft Windows 服务(1) C#创建Windows服务

    Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而 ...

  5. “康园圈--互联网+校园平台“项目之sprint1总结

    一.团队成员     梁植淋,官郅豪,纪焓,詹耀海 二.目前进度       在全体组员的努力下,目前完成了项目的<设计方案书>.<功能需求书>.框架搭建.项目部署文档. 并成 ...

  6. AEAI CRM客户关系管理升级说明

    本次发版的AEAI CRM_v1.5.1版本为AEAI CRM_v1.5.0版本的升级版本,该产品现已开源并上传至开源社区http://www.oschina.net/p/aeaicrm. 1 升级说 ...

  7. jQuery中的动画与特效

    1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,简单介绍jQuery的显示和隐藏. <script type="text/javascript&q ...

  8. C#语法糖

    首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕不已,呵呵. 1.  ...

  9. 【Bootstrap基础学习】05 Bootstrap学习总结

    好吧,Copy了几天,这个总结算是把我对Bootstrap的一些理解写一下吧. Bootstrap只是一套别人写好的前端框架,直接拿来用就好. 不过对于专业的前端而言,如果不去把所有的代码都看一遍来理 ...

  10. DotNetBar的初步使用

    以前有用过SkinSharp和IrisSkin2皮肤控件来美化UI,简单易用,但不方便自定义.而DotNetBar功能很强大,不仅有Windows2007风格,更有Ribbon风格的界面效果.其效果演 ...