一、HTML & XML

HTML

是用来描述网页的一种语言

HTML 指的是超文本标记语言 (Hyper Text Markup Language)

HTML 不是一种编程语言,而是一种标记语言 (markup language)

HTML 被设计用来显示数据

HTML5

是下一代的 HTML

增加了用于绘画的 canvas 元素

用于媒介回放的 video 和 audio 元素等等

XML

XML 是一种标记语言,很类似 HTML

XML 的设计宗旨是传输和存储数据,而非显示数据

二、XML & JSON 简介

JSON

作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式

基于JavaScript的一个子集

易读性略差,编码手写难度大,数据量小

JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中

XML

可扩展标记语言

用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言

易读性高,编码手写难度小,数据量大

三、JSON格式说明

对象: {} 括起来的内容

数据结构为 {key:value,key:value,...}的键值对的结构

可以反序列化为OC中的NSDictionary

数组: []括起来的内容

数据结构为 ["java","javascript","vb",...]

可以反序列化为OC中的NSArray

序列化:在传输之前,将对象转换成有序的字符串或者二进制数据流

反序列化:将接收到的字符串或者二进制数据流转换成对象或者数组,以便程序访问

四、解析服务器端返回的JSON数据

作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式

从iOS 5开始,使用NSJSONSerialization对JSON解析

其他常见的三种JSON解析第三方库:

SBJson

JSONKit

TouchJson

从性能上来说,NSJSONSerialization最好,JSONKit次之,SBJson使用较为广泛,API简单易用

JSON是轻量级的数据交换格式,正逐步取代XML,成为通用网络数据格式

使用类方法JSONObjectWithData:options:error:可以将接收到的JSON数据反序列化为NSArray或NSDictionary等对象

技巧:

将加载内容反序列化为JSON后,可以先保存至plist文件,以便后续操作

由于是网络应用,不要使用UIImage的同步加载方法设置ImageView的内容,否则容易造成应用阻塞,影响用户体验

加载网络图片使用的第三方框架SDWebImage,官网地址: https://github.com/rs/SDWebImage

五、NSXMLParser解析方法

NSXMLParser是SAX方法解析

SAX(Simple API for XML)

只能读,不能修改,只能顺序访问,适合解析大型XML,解析速度快

常应用于处理大量数据的XML,实现异构系统的数据访问,实现跨平台

从文档的开始通过每一节点移动,定位一个特定的节点

DOM(Document Object Model)

不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,适合解析小型文档

一般应用与小型的配置XML,方便操作

为载入到内存的文档节点建立类型描述,呈现可横向移动、潜在巨大的树型结构

在内存中生成节点树操作代价昂贵

六、NSXMLParser解析过程

1. 创建NSXMLParser实例,并传入从服务器接收的XML数据

2. 定义解析器代理

3. 解析器解析

4. 通过解析代理方法完成XML数据的解析

七、NSXMLParser解析代理方法

// 1. 开始解析XML文档

- (void)parserDidStartDocument:

// 2. 开始解析某个元素,会遍历整个XML,识别元素节点名称

- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:

// 3. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次!为了节约内存开销

- (void)parser:foundCharacters:

// 4. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息

- (void)parser:didEndElement:namespaceURI:qualifiedName:

注意:在解析过程中,2、3、4三个方法会不停的重复执行,直到遍历完成为止

// 5. 解析XML文档结束

- (void)parserDidEndDocument:

// 6. 解析出错

- (void)parser:parseErrorOccurred:

iOS基础 - XML & JSON的更多相关文章

  1. iOS开发——XML/JSON数据解析

    NSJSONSerialization 接下来就正式开始.苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂. 首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要 ...

  2. iOS开发笔记3:XML/JSON数据解析

    这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...

  3. ios解析XML和json数据

    解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...

  4. iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  5. 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)

    一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...

  6. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  7. 在ios中解析json数据

    刚刚下午那会 弄了个 解析 xml  demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单 考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟 ...

  8. Java基础-处理json字符串解析案例

    Java基础-处理json字符串解析案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible ...

  9. iOS 基础入门--Bull' Eye 小游戏 

      说明   Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...

随机推荐

  1. jvm对大对象分配内存的特殊处理(转)

    前段日子在和leader交流技术的时候,偶然听到jvm在分配内存空间给大对象时,如果young区空间不足会直接在old区切一块过去.对于这个结论很好奇,也比较怀疑,所以就上网搜了下,发现还真有这么回事 ...

  2. typeof + instanceof+toString+constructor什么推理javascript数据类型

    一个.typeof JS这些变量是弱类型(这是弱类型)的,它可以不管用来存储数据的类型的. typeof 数据类型可用于检测给定的变量.可能的返回值: 1. 'undefined' --- 这个值没有 ...

  3. do...while(0)神奇

    1. do...while(0)消除goto语句. 通常,假设在一个函数中開始要分配一些资源.然后在中途运行过程中假设遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样: version ...

  4. Mono 4 和Jexus 5.6

    Mono 4 和Jexus 5.6 概述 在这篇文章中我们将讨论如何在CentOS 7操作系统,安装 jexus. mono 和 配置 jexus,因此它将能够在这种环境中运行一个asp.net mv ...

  5. crawler_基础之_httpclient 访问网络资源

    先粘贴一个 简单版的,后期再修改 pom文件 <dependency> <groupId>org.apache.httpcomponents</groupId> & ...

  6. 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划

    今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...

  7. git合并远端分支到本地分支的两种方式

    作者:zhanhailiang 日期:2014-11-21 在使用版本号工具提交改动之前,都须要通过update先将本地代码更新到最新版本号.SVN通过svn update就能够实现,那么git怎样实 ...

  8. Android Studio非gradleproject编译后的apk文件在哪?

    非gradle的apk文件位置和gradle有一些差别,怎样找到apk文件在哪?我直接上图吧,选中project,右键: 在windows是选择"show in exlporer" ...

  9. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  10. 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇

    根据前一篇文章<移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇>所述,因为Appium和MonkeyRunner有一个共同点--代码控制流程都是在客户端实现的. ...