xml处理之dom与sax

来源:互联网 发布:电脑vr软件 编辑:程序博客网 时间:2024/05/17 08:47

概述:

SAX同DOM一样都是访问XML文档的接口。DOM将xml解析成树状模型,结构清晰,操作方便,但是消耗内存。而SAX是将xml通读一遍,在读取过程中发现满足某个条件,就产生事件,然后处理事件,特点是省内存,但是无法随意访问某个节点。SAX可以快速扫描一个大型的XML文档,当它找到查询标准时就会立即停止,然后再处理之。简单的说,DOM会把xml所有内容映射到内存,所有xml信息都在内存里就很好操作。但是SAX就读一遍xml文件,然后产生相应事件,交由事件处理器处理,必须在读的过程中处理,读完之后就无法处理了。SAX相当于是流式的访问xml文件,不存储任何信息到内存中。

Pull是类似于DOM的一种xml访问接口

详细比较

每一个进行XML开发的编程人员都知道DOM,那为什么在有了DOM这个功能强大的文档对象模型之后,我们还需要SAX?这就要从它们根本不同的实现方法上来分析。DOM解析器是通过将XML文档解析成树状模型并将其放入内存来完成解析工作的,而后对文档的操作都是在这个树状模型上完成的。这个在内存中的文档树将是文档实际大小的几倍。这样做的好处是结构清楚、操作方便,而带来的麻烦就是极其耗费系统资源。而SAX正好克服了DOM的缺点。SAX解析器的处理过程是通读整个文档,根据文档内容产生事件,而把对这些事件的处理交由事件处理器处理。SAX不需要在内存中保存整个文档,它对系统资源的节省是显而易见的。这样在一些需要处理大型XML文档和性能要求比较高的场合就要用SAX了。

下面的表格列出了SAX和DOM在一些方面的对照:

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

通过对SAX和DOM的分析,它们各有自己的不同应用领域:

SAX适于处理下面的问题:

  1. 对大型文档进行处理。
  2. 只需要文档的部分内容,或者只需要从文档中得到特定信息。
  3. 想创建自己的对象模型的时候。

DOM适于处理下面的问题:

  1. 需要对文档进行修改
  2. 需要随机对文档进行访问,例如XSLT解析器。

参考资料

http://www.ibm.com/developerworks/cn/xml/x-saxhandle/

0 0
原创粉丝点击