数据解析(XML和JSON数据结构)
3 一般 XML 文档 (XML Document)
4 举例 :
<student> 【标签,表示开始】
<name>你</name>
<hobby>女</hobby>
</student> 【标签,表示结束】
5 XML 文档的语法:
5.1 文档声明:在 XML 文档最前面,必须写一个文档声明
a 最简单的声明 :<?xml version = "1.0"?>
b 用encoding 属性,来说明文档字符编码:<?xml version = "1.0" encoding = "UTF-8"?>
5.2 元素(Element):一个元素,会包含一个开始标签和一个结束标签
a 有所有内容:<name>你</name>
b 无元素内容:<name></name>
而且一个元素可嵌套若干个子元素,但不能出现交叉嵌套
<students>
<student> 【标签,表示开始】
<name>你</name>
<hobby>女</hobby>
</student> 【标签,表示结束】
<stdudents>
** 注意 : 1 规范的 XML 文档最多只有一个根元素,其他的都是根元素的子孙元素。
2 在 XML 中,空格和换行,都会被当做具体内容去处理,例如: a和b 是不一样的
a <name>你</name>
b <name>
你
</name>
5.3 属性(Atribute):一个元素可以拥有多个属性,例如
<video name="小黄人" hobby="apple"/>【video 元素拥有 name,hobby两个属性】
*注意 : 属性的值必须用 "" 或者 '' 括住
*属性表示的信息,也可用子元素来表示,例如:
<video>
<name>小黄人</name>
<hobby>apple</hobby>
</video>
6 对 XML 文档的解析:
提取 name 元素里面的内容:<name>小黄人</name>
或者是提取 video 元素中 name 和 hobby 的值 :<video name="小黄人" hobby="apple"/>
7 --- SAX 解析 ---- Simple API for XML
SAX: 基于事件驱动的解析方式,逐行解析数据(采用协议回调机制)
<student>
<name>你</name>
<hobby>女</hobby>
</student>
</students>
a 解析方式,逐行进行解析。
a.1 打开 XML 文档
a.2 开始节点(开始标签)
a.3 逐行进行解析
a.4 发现元素里面的内容
a.5 提取内容
a.6 结束节点(结束标签)
a.7 循环开始,直到遇到 根元素的结束标签,解析才彻底结束
b.1 苹果原生: NSXMLParser -- SAX 方式解析,使用简单
b.2 第三方框架:
b JSON 中的方括号 [], 在OC 中表示 NSArray
1> XML
优点:\u2028
格式统一, 符合标准\u2028
容易与其他系统进行远程交互, 数据共享比较方便
\u2028 缺点:
XML文件格式文件庞大, 格式复杂, 传输占用带宽\u2028
服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护
客户端不同,浏览器之间解析XML的方式不一致, 需要重复编写很多代码\u2028
服务器端 和 客户端 解析XML花费资源和时间
2> JSON
优点:\u2028
数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小\u2028
易于解析这种语言
支持多种语言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析\u2028
因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护\u2028
缺点:\u2028
没有XML格式这么推广的深入人心和使用广泛, 没有XML那么通用性\u2028
JSON格式目前在Web Service中推广还属于初级阶段
2.JSON、XML解析方式的底层实现
1> XML
Xml两种解析方式,DOM 和 SAX。
DOM 需要读入整个XML文档(文档驱动),SAX 是事件驱动的,并不需要读入整个文档,文档的读入过程也就是SAX的解析过程。
SAX 简单地说就是对XML文档进行顺序扫描,当扫描到 文档 的 开始 与 结束 ,元素(element)的 开始 与 结束 时,就会触发相应的事件处理 函数,由事件处理函数做相应的动作,处理完后继续扫描,直到文档结束,则解析完毕
DOM 解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许你使用 DOM API 操作 XML 树。也就是说,DOM 会把XML以 树 的形式读取到内存中,然后在通过相应的 API 来操作这个 XML树,从而达到解析XML文件的目的
2> JSON
json底层原理 遍历字符串中的字符,最终根据特助字符,比如{},[],:号等进行区分,{}是字典,[]表示的是数组,:号是字典的键和值的分水岭,最后是将json数据转化为字典,然后使用 KVC 将字典转为 model
1)对于复杂的数据结构使用XML,简单的数据结构可采用JSON。
2)在互联网应用中数据传输中,提倡使用JSON。
数据解析(XML和JSON数据结构)的更多相关文章
- IOS 请求数据解析 XML 和 JSON
好久没写文章了,回忆一下以前的内容记录一下吧. 这一段主要接触的就是数据解析,就说一下数据解析 现在数据解析一般解析两种数据 xml 和 JSON 那就从xml解析说起吧 xml解析需要用到一个类 N ...
- boost-使用property_tree来解析xml、json
property_tree是一个保存了多个属性值的树形数据结构,可以用来解析xml.json.ini.info文件.要使用property_tree和xml解析组件的话需要包含"boost/ ...
- Python解析xml与JSON
xml与json是常用的文件交换格式,常用来表示网页的html则是xml的变种.解析xml和json在web开发中有着重要应用. DOM解析XML 文件对象模型(Document Object Mod ...
- ios解析XML和json数据
解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...
- UI:数据的解析XML与JSON
XML 和 JSON 语言 本篇博客来自互联网参考 XML 和 JSON 的互相转化 有属性的转化为对象,无属性的转化为字符串 节点的顺序性不可逆,XML有顺序,JSON 无顺序 XML 和 J ...
- android基础篇------------java基础(11)(文件解析xml and Json )
一:xml文件解析 首先看一下:我们要解析的内容: <?xml version="1.0" encoding="gbk" ?> - <book ...
- 个人永久性免费-Excel催化剂功能第90波-xml与json数据结构转换表格结构
在网络时代,大量的数据交互以xml和json格式提供,特别是系统间的数据交互和网络WebAPI.WebService接口的数据提供,都是通过结构化的xml或json提供给其他应用调用返回数据.若能提供 ...
- c# json数据解析——将字符串json格式数据转换成对象
网络中数据传输经常是xml或者json,现在做的一个项目之前调其他系统接口都是返回的xml格式,刚刚遇到一个返回json格式数据的接口,通过例子由易到难总结一下处理过程,希望能帮到和我一样开始不会的朋 ...
- Flex与Java交互(Flex调用java类展示数据)解析xml展示数据
Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869 Flex与java通信 ...
随机推荐
- React Native 一个组件styles BUG
'use strict'; var React = require('react-native'); var { StyleSheet, PanResponder, View, Text } = Re ...
- php类的__get和__set方法
(1)这两个方法是自动调用的 (2)这两个方法只有在成员变量是private的时候才会自己调用 testclass.php <?php class testclass { private $va ...
- JAVA 内部类 泛型 实现堆栈
堆栈类: package c15; public class LinkedStack<T> { private static class Node<T> { T item ; ...
- SparkSQL读取Hive中的数据
由于我Spark采用的是Cloudera公司的CDH,并且安装的时候是在线自动安装和部署的集群.最近在学习SparkSQL,看到SparkSQL on HIVE.下面主要是介绍一下如何通过SparkS ...
- java语法基本知识2
对象的引用相当于C中的指针.对象存在于堆中,引用存在于栈中.引用在函数,可以称作局部变量.
- eclipse为方法添加注释的快捷键是什么
/** * 登录验证 * @param 传入的vo类 * @return * @throws Exception */这种注释快捷键? 先敲“/”在敲两个**,然后回车
- linux下crontab命令的使用
1.crond crond是Linux下的一个守护进程,与windows下的计划任务类似,当操作系统安装完成后,默认会安装并启动进程,Linux下的任务调度分为两类,系统任务调度和用户任务调度. 系统 ...
- Java 验证码工具类
package com.wuyu.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ...
- javascript中值传递与值引用的研究
今天重新看了一下<javascript高级程序设计>,其中讲到了javascript中的值传递和值引用,所以就自己研读了一下,但是刚开始没有明白函数中的参数只有值传递,有的场景好像参数是以 ...
- 【转】Thread.isBackground
C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程.个人感觉这样的解释等于没有解释. .Net中的线程,可以分为后台 ...