XML解析和Json解析简介以及两者的区别

现在比较交流行和常用的对于网络请求数据的解析的方式基本就是XML解析和Json解析

下面我们来对这两种解析方式做一些总结


一、XML解析:

服务器端解析是通过一般的XSLT转换工具(如Java下的Xalan)将XML和XSL合成为HTML,送到客户端。  客户端解析是把XML和XSL都显现给客户端,把解析的任务交给浏览器。
当然对于不同的解析器有不同的工作原理,目前常用的XML的解析器主要有:SAX,DOM

1、SAX

当sax分析器对xml文档进行分析时,触发一系列事件,并激活相应的事件处理函数,从上到下的顺序读取,读取一行就处理一行。它不允许对xml文件随机存取,没有把xml文档完全加载到内存,占用内存少。

SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。另一方面,由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的,总而言之:

sax解析的优点占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的增删改查。

相关链接:点击打开链接

2、DOM

在dom中,解析文档的结构类似为一棵树,文档、文档中的根、元素、元素内容、属性、属性值等都是以对象模型的形式表示的。Dom能够在内存中保存整个文档的模型,可以方便对xml元素。

DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM 树可能是一个缓慢的过程,总之:

dom解析的优点是对文档增删改查比较方便,缺点占用内存比较大。

相关链接:点击打开链接

3、选择 DOM 还是选择 SAX,这取决于下面几个因素:
应用程序的目的:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。
数据容量: 对于大型文件,SAX 是更好的选择。数据将如何使用:如果只有数据中的少量部分会被使用,那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么 SAX 也许不是恰当的选择。
对速度的需要:SAX 实现通常要比 DOM 实现更快。
SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!

SAX,DOM是两种对XML文档进行分析的方法(没有具体的实现,只有接口),所以不是解释器,如果光有他们,你是完成不了对xml文档的处理的。SAX的包是org.xml.sax,DOM的包是org.w3c.dom,包的名称很重要,它有助于你理解他们之间的关系。

4、jaxp是api,他封装了sax/dom两种接口。并在sax/dom的基础之上,作了一套比较简单的api以供开发人员使用。jaxp的包是javax.xml.parsers,可以看看jaxp的源文件,它的文件中包含了对sax或者dom的引用(import)jaxp也不是具体的实现,他只是一套api。如果你仅仅有jaxp那是无法工作的,(其实jaxp只是完成对sax、dom的包装,生成了DocumentBuilderFactory/DocumentBuilder和SAXParserFactory SAXParser。也就是设计模式中的工厂模式,他的好处就是具体的对象( 解释器)建立由子类完成)

对于XML的了解请查看链接:点击打开链接

二、Json解析:

JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。JSON基于JavaScript Programming Language,Standard ECMA-262 3rd Edition - December 1999 的一个子集。

json解析的底层原理:
遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}号,[]号,: 号 等进行区分,{}号是一个字典的开始,[]号是一个数组的开始,: 号是字典的键和值的分水岭,最终乃是将json数据转化为字典,字典中值可能是字典,数组,或字符串而已。

对于Json的深入了解请查看相关链接:

点击打开链接

三、XML和Json的优缺点

(1).XML的优缺点
<1>.XML的优点
  A.格式统一,符合标准;
  B.容易与其他系统进行远程交互,数据共享比较方便。
<2>.XML的缺点
  A.XML文件庞大,文件格式复杂,传输占带宽;
  B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
  C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
  D.服务器端和客户端解析XML花费较多的资源和时间。
(2).JSON的优缺点
<1>.JSON的优点:
  A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
  B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
  C.支持多种语言,包括ActionScript,C,ColdFusion,PHP,Python,Ruby等服务器端语言,便于服务器端的解析;
  D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
  E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
<2>.JSON的缺点
  A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
  B.JSON格式目前在Web Service中推广还属于初级阶段。

四、XML和Json的优缺点对比:

(1).可读性方面。 JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。 (2).可扩展性方面。 XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。 (3).编码难度方面。 XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。 (4).解码难度方面。 XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。 (5).流行度方面。 XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。 (6).解析手段方面。 JSON和XML同样拥有丰富的解析手段。 (7).数据体积方面。 JSON相对于XML来讲,数据的体积小,传递的速度更快些。 (8).数据交互方面。 JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。 (9).数据描述方面。 JSON对数据的描述性比XML较差。 (10).传输速度方面。 JSON的速度要远远快于XML。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念