【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解析的更多相关文章

  1. Android基础总结(12)——XML和JSON解析

    XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...

  2. 一起学Android之Xml与Json解析

    概述 在网络中,数据交互通常是以XML和Json的格式进行,所以对这两种格式的数据进行解析,是Android开发中的必备功能,本文以一个简单的小例子,简述Android开发中Xml和Json解析的常用 ...

  3. python入门(十):XML和JSON解析

    一.python解析XML 1.xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合,注意xml.dom包里面有许多模块,须区分它们间的不同: 2.xml. ...

  4. golang的xml、json解析

    xml golang的xml处理主要应用Unmarshal.Marshal方法实现,解析一个xml到struct如下,首先是xml文件: <?xml version="1.0" ...

  5. Demo XML 、 JSON 解析 AND 网络HTTP请求

    有道云笔记分享:http://note.youdao.com/share/?id=7950b949a5017a698a9ecc95bc250ec5&type=note 后台服务端:C#.服务器 ...

  6. 文件管理与XMl、JSON解析

    1.使用内部存储器 你可以直接保存文件在设备的内部存储.默认情况下,文件保存在你的应用程序的内部存储,其他应用程序或用户不能访问.当用户卸载你的应用城西是,这些文件被删除. (一)在内部存储创建并写入 ...

  7. 两种常用的数据交换格式:XML和JSON

    不同编程语言之间的数据传输,需要一种通用的数据交换格式,它需要简洁.易于数据储存.快速读取,且独立于各种编程语言.我们往往传输的是文本文件,比如我们都知道的csv(comma seperated va ...

  8. JSON解析和XML解析对比

    JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...

  9. 数据解析(XML和JSON数据结构)

    一   解析 二 XML数据结构 三 JSON 数据结构     一 解析 1  定义: 从事先规定好的格式中提取数据     解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照 ...

随机推荐

  1. 最新JetBrains PyCharm 使用教程--常用功能设置(三)

    选择代码路径和Python解释器版本 ​ 设置Pycharm菜单字体的大小 ​ 设置编辑器里面字体大小 ​ 设置文件编码 ​ 设置背景颜色 ​ 设置tab键为4个空格 ​ 设置代码内容和关键字颜色 ​ ...

  2. Linux 常用命令 | free 详解

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一.本文介绍free命令的使用方法和 ...

  3. matlab中的eval函数使用

    matlab中的eval函数使用 在matlab的命令行窗口中输入help eval命令回车就可以看到eval函数的官方解释,大概的意思就是执行matlab中的表达式,计算expression表示的代 ...

  4. C# Web分页功能实现

    无论是网站还是APP分页功能都是必不可少的.为什么使用分页呢? 1,加载速度快,不会占用服务器太多资源,减少服务器压力. 2,减少数据库压力. 3,提升用户体验. 那么我们常用的分页方法有两种. 1, ...

  5. 第一篇: openJDK源码编译安装--mac版本

    1.为什么要编译JDK 想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原理,虽然门槛高一点,但肯定比阅读各种书籍,文章,博客 ...

  6. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  7. nyoj 41-三个数从小到大排序(STL --> sort(a, a+n) 升序)

    41-三个数从小到大排序 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:31 submit:44 题目描述: 现在要写一个程序,实现给三个数排序的功 ...

  8. 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...

  9. TestNg练习001

    15分钟入门TestNG 阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装TestNg TestNG最简单的测试 TestNG的基本注解 TestNG中如 ...

  10. gin索引优化实例1

    GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一 ...