XML解析SAX与DOM

来源:http://www.cnblogs.com/zhulin/archive/2012/05/03/2480962.html

SAX与DOM

在解析xml时(如浏览器解析html标签),主要存在两种方式:SAX模式和DOM模式

 

SAX (Simple API for XML)  DOM (Document Object Model) 是当前两个主要的XML API,几乎所有商用的xml 解析器都同时实现了这两个接口。因此如果你的程序使用了SAX或者DOM APIs,那么你的程序对xml解析器是透明。

 

SAX DOM
依序读入文件并产生相对应事件,可以处理任何大小的XML文件。 在内存中建立文件树,不适于处理大型的XML文件。
只能对文件按顺序剖析一遍,不支持对文件的随意存取 可以随意存取文件树的任何部分,没有次数限制
只能读取XML文件内容,而不能修改 可以随意修改文件树,从而修改了XML文件
开发上比较复杂,需要自己来制作事件处理器 易于理解,易于开发
对工作人员更灵活,可以用SAX建立自己的XML对象模型 已经在DOM基础之上建立了文件树
 
基于事件的处理的优点和缺点

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

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

  
选择 DOM 还是选择 SAX,这取决于下面几个因素:

    1.
应用程序的目的:如果打算对数据作出更改并将它输出为  XML ,那么在大多数情况下, DOM  是适当的选择。并不是说使用  SAX  就不能更改数据,
      但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。  

    2.
数据容量:  对于大型文件, SAX  是更好的选择。  
      数据将如何使用:如果只有数据中的少量部分会被使用,那么使用  SAX  来将该部分数据提取到应用程序中可能更好。  另一方面,
      如果您知道自己以后会回头引用已处理过的大量信息,那么  SAX  也许不是恰当的选择。  

    3.
对速度的需要:  SAX  实现通常要比  DOM  实现更快。  

   SAX 
 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值