当前位置: 首页 > news >正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

前言:本篇随笔介绍的是XML解析。

 

正文:

 

1、XML解析方式有2两种:

  • DOM:一次性将整个XML数据加载进内存进行解析,比较适合解析小文件
  • SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件

 

2、IOS中XML解析方案有很多种:

  2-1、第三方框架:

    libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX解析

    GDataXML:DOM方式解析,由Google开发,基于libxml2

  2-2、苹果原生

    NSXMLParser:SAX方式解析,使用简单

  2-3、本人基于苹果原生NSXMLParser封装好的XML解析工具

    HYXMLParser:SAX方式解析,使用比NSXMLParser更简单,更简洁。

               下载地址:HYXMLParser

 

3、XML解析方式的选择建议

  大文件:NSXMLParser或者HYXMLParserlibxml2(但是几乎不用)

  小文件:GDataXML、NSXMLParser或者HYXMLParser、libxml2

 

4、NSXMLParser使用示例:

   解析过程三步走:

  

    

  

   以上示例源码百度云分享链接: http://pan.baidu.com/s/1c1oLiRu 密码: byxc

5、关于本人封装NSXMLParser而创作的HYXMLParser使用代码示例:

  <好处:使用方便,可以面向任意类型的模型对象解析XML,复用性高,与外界高内聚低耦合>

  这里展示的示例是从我的github上HYXMLParser下载的XMLParser_3这第3个版本的XML解析工具类:

  

  5-1、先将HYXMLParse文件工具类直接拷贝你的项目中:

  

  5-2、然后使用:

  

  根据实际需求,字典转模型的方法可能用MJExtension代替KVC最合适。

  

  如果读者熟悉苹果原生的NSXMLParser,那么再来使用本人封装好的这个HYXMLParser,你会发现本人封装好的HYXMLParser很简单易用。

  同时建议刚学习XML解析的读者先熟练掌握苹果NSXMLParser解析,也就是前面第4点介绍的解析过程,再来学习使用本人的HYXMLParser

 

6、简单说说本人封装好的的HYXMLParser_3的实现思路。

  6-1、将苹果原生的NSXMLParser通过代理方法SAX解析XML的方式封装在一个普通的NSObject类中。

  6-2、在代理解析方法中,因为需要不断的创建模型对象,这里我使用了NSObjectFromString方法,通过类的名字来创建类对象,然后通过类对象创建模型对象。

      这样就模型对象的类名可以通过参数NSString类型外部传入,同时实现了与模型对象的解耦,不需要import需要的模型对象的类。

  6-3、根据实际需求,可能需要MJExtension字典转模型来替代功能有限的苹果原生的KVC,所以这里用Block来提供对外公开的接口,让外部自由选择字典转模型的方法。

 

 

 

 

转载注明出处:http://www.cnblogs.com/goodboy-heyang/p/5188410.html,尊重劳动成果。

转载于:https://my.oschina.net/u/2363463/blog/635671

相关文章:

  • python from-import语句用法
  • 学习GDB(二)
  • 【C++】模版的概念、使用方法和深入了解
  • Ajax:拥抱JSON,让XML走开
  • Intellij IDEA 根据数据库自动生成pojo和hbm
  • Storm的2种运行模式
  • GridView创建菜单栏
  • 问题-某个程序改了ICO图标后编译后还是显示老图标?
  • 自动生成小学四则运算题目的程序
  • Android视频直播解决方案(rstp、udp)
  • js实现touch移动触屏滑动事件
  • 7、JavaScript 知识总结
  • 正则学习笔记
  • 注解
  • 堆和栈的区别(转过无数次的文章)
  • @angular/forms 源码解析之双向绑定
  • 【5+】跨webview多页面 触发事件(二)
  • 【node学习】协程
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • AHK 中 = 和 == 等比较运算符的用法
  • Angular4 模板式表单用法以及验证
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • java 多线程基础, 我觉得还是有必要看看的
  • js中forEach回调同异步问题
  • mysql 5.6 原生Online DDL解析
  • SOFAMosn配置模型
  • webgl (原生)基础入门指南【一】
  • 从0到1:PostCSS 插件开发最佳实践
  • 解析 Webpack中import、require、按需加载的执行过程
  • 看域名解析域名安全对SEO的影响
  • 理解在java “”i=i++;”所发生的事情
  • 理清楚Vue的结构
  • 实现菜单下拉伸展折叠效果demo
  • 听说你叫Java(二)–Servlet请求
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (2.2w字)前端单元测试之Jest详解篇
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (LeetCode 49)Anagrams
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (黑马C++)L06 重载与继承
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (五)关系数据库标准语言SQL
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Google的Objective-C编码规范
  • (转)重识new
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ***检测工具之RKHunter AIDE
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析