XML与JSON解析
【XML简介】
XML在线校验工具:
http://tool.oschina.net/codeformat/xml
可扩展标记语言(EXtensible Markup Language)
一种标记语言,很类似 HTML(传输、与显示的区别)
设计宗旨是传输数据,而非显示数据
标签没有被预定义
被设计为具有自我描述性
是W3C(万维网联盟) 的推荐标准
XML文档是一种树结构:
必须包含根元素
所有元素均可拥有子元素
其中的元素形成了一棵文档树
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
1 <?xml version="1.0" encoding=“GB2312” standalone=“no” ?>
2 <?xml-stylesheet type=“text/xsl” href=“paixu.xsl” ?>
3 <!--下面是名单列表-->
4 <学生列表>
5 <学生 id = “001”>
6 <学号>200520101</学号>
7 <姓名>王佳</姓名>
8 </学生>
9 <学生 id =“002”>
10 <学号>200520102</学号>
11 <姓名>许琛</姓名>
12 </学生>
13 </学生列表>
XML声明:第1行
处理命令(可选):第2行
注释(可选):第3行
XML元素:第4到13行
XML文档声明:
每个文档都必须以XML声明开头
包括XML版本(不可省)及所使用字符集等信息
XML文档前面不允许在有其它任何字符,包括空格
举例:
<?xml version="1.0" endcoding="GB2312" standalone=“yes"?>
XML元素与标记:
元素是XML文档的基本单元
标记用来对元素内容进行说明
标记和元素内容共同表示XML文档的意义和逻辑结构
例:
使用格式: <标记>元素内容</标记>
<mobile>XML解析</mobile>
【解析原理】
XML解析:
将 XML数据从其序列化字符串格式转换为分层格式的过程
XML解析方式:
基于树型的解析:将XML文档转换成树型结构
基于事件的解析:将XML文档视为一系列的事件。当一个特殊事件发生时,解析器将调用开发者提供的函数来处理。
【DOM解析】
英文“Document Object Model”的缩写,中文意思为“文档对象模型”
基于树型解析的XML解析方式
通过树型结构存取XML文档

【GDataXML配置-手动配置】
GDataXML基于libxml2库,得做以下配置
导入libxml2库
设置libxml2的头文件搜索路径(为了能找到libxml2库的所有头文件)
在Header Search Path中加入/usr/include/libxml2
设置链接参数(自动链接libxml2库)
在Other Linker Flags中加入-lxml2
【GDataXML配置-cocoPods配置】
pod 'GDataXML-HTML', '~> 1.3.0'
【GDataXML-类介绍】
【GDataXML用法】
//获取文档
GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:data encoding:NSUTF8StringEncoding error:nil];
//获取根元素
GDataXMLElement *rootElement = document.rootElement;
//获取所有的学生元素
NSArray *array = [rootElement elementsForName:@"stu"];
//遍历所有元素
for (GDataXMLElement *elent in array) {
//标签中的属性
NSString *ID = [elent attributeForName:@"id"].stringValue;
//取出关键字对应的所有内容中的第一个元素
GDataXMLElement *elent1 = [elent elementsForName:@"name"].firstObject;
NSString *name = elent1.stringValue;
GDataXMLElement *elent2 = [elent elementsForName:@"sex"].firstObject;
NSString *sex = elent2.stringValue;
}
【XML解析---SAX解析】
1. 创建NSXMLParser实例,并传入从服务器接收的XML数据
2. 定义解析器代理
3. 解析器解析
4. 通过解析代理方法完成XML数据的解析
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
parser.delegate = self;
[parser parse];
// 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:
【JSON简介】
JSON在线校验:http://www.bejson.com/
作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式
基于JavaScript的一个子集
易读性略差,编码手写难度大,数据量小
JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中
作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式
从iOS 5开始,使用NSJSONSerialization对JSON解析
【字符串】
“city”:”北京”
【NSNumber】
“age”: 10
【字典】
{
"weatherinfo": {
"city": "北京",
"cityid": "101010100",
"temp": "10",
"WD": "东南风",
"WS": "2级",
"SD": "26%",
"WSE": "2",
"time": "10:25",
"isRadar": "1",
"Radar": "JC_RADAR_AZ9010_JB",
"njd": "暂无实况",
"qy": "1012"
}
}
【数组】
{
“学生”: [
{
"姓名": "小明",
"年龄": "20"
},
{
"姓名": "小强",
"年龄": "20"
}
]
}
注意:所有的key必须用双引号阔起来
【JSON解析】
解析的本质,就是将JSON数据转换为OC数据
其他常见的三种JSON解析第三方库:
SBJson
JSONKit
TouchJson
从性能上来说,NSJSONSerialization最好,JSONKit其次。SBJson使用较为广泛,API简单易用
【NSJSONSerialization】
//将OC对象转换为JSON Data
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
//将JSON Data转换为OC对象
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
《了解》
【JSONKit】
NSDictionary *weatherDic = [jsonString objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];
【SBJson】
【TouchJson】
XML与JSON解析的更多相关文章
- Android基础总结(12)——XML和JSON解析
XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...
- 一起学Android之Xml与Json解析
概述 在网络中,数据交互通常是以XML和Json的格式进行,所以对这两种格式的数据进行解析,是Android开发中的必备功能,本文以一个简单的小例子,简述Android开发中Xml和Json解析的常用 ...
- python入门(十):XML和JSON解析
一.python解析XML 1.xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合,注意xml.dom包里面有许多模块,须区分它们间的不同: 2.xml. ...
- golang的xml、json解析
xml golang的xml处理主要应用Unmarshal.Marshal方法实现,解析一个xml到struct如下,首先是xml文件: <?xml version="1.0" ...
- Demo XML 、 JSON 解析 AND 网络HTTP请求
有道云笔记分享:http://note.youdao.com/share/?id=7950b949a5017a698a9ecc95bc250ec5&type=note 后台服务端:C#.服务器 ...
- 文件管理与XMl、JSON解析
1.使用内部存储器 你可以直接保存文件在设备的内部存储.默认情况下,文件保存在你的应用程序的内部存储,其他应用程序或用户不能访问.当用户卸载你的应用城西是,这些文件被删除. (一)在内部存储创建并写入 ...
- 两种常用的数据交换格式:XML和JSON
不同编程语言之间的数据传输,需要一种通用的数据交换格式,它需要简洁.易于数据储存.快速读取,且独立于各种编程语言.我们往往传输的是文本文件,比如我们都知道的csv(comma seperated va ...
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- 数据解析(XML和JSON数据结构)
一 解析 二 XML数据结构 三 JSON 数据结构 一 解析 1 定义: 从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照 ...
随机推荐
- 小白学 Python(21):生成器基础
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- linux shell脚本语法笔记
1.&,&&,|,|| &:除了最后一个cmd,前面的cmd均已后台方式静默执行,执行结果显示在终端上,个别的cmd错误不影响整个命令的执行,全部的cmd同时执行 &a ...
- 关闭redis持久化功能
关闭redis持久化功能持久化会报如下信息 会影响硬盘写入性能 所以没什么用 就关掉吧 修改redis配置文件,redis.conf 第115行左右. 1.注释掉原来的持久化规则 <pre> ...
- 201871010114-李岩松《面向对象程序设计(java)》第六、七周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- keeplived离线安装openssl-devel依赖包
转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1434 由于公司业务并发比较高需要高可用使用LVS keeplived.在linux系统ce ...
- 02. JVM运行机制
JVM运行机制 JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程
- 小白学 Python 爬虫(2):前置准备(一)基本类库的安装
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 本篇内容较长,各位同学可以先收藏后再看~~ 在开始讲爬虫之前,还是先把环境搞搞好,工欲善其事必先利其器嘛~~~ 本篇 ...
- RHEL7.2 SSH无密码登录非root用户
1 修改三台虚拟机的/ect/hosts文件 [hadoop@hadoop01 ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain ...
- 网站统计IP PV UV
###我只是一个搬运工 网站流量统计可以帮助我们分析网站的访问和广告来访等数据,里面包含很多数据的,比如访问使用的系统,浏览器,ip归属地,访问时间,搜索引擎来源,广告效果等. PV(访问量):Pag ...
- 在Raspberry Pi上创建容器
树莓派Raspbian默认是支持LXC容器的,下面我们介绍一下在树莓派上创建并运行容器的过程. 1. 安装LXC相关的package $ sudo apt-get install -y git lxc ...