加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml处理之dom与sax

发布时间:2020-12-16 06:22:58 所属栏目:百科 来源:网络整理
导读:概述: SAX同DOM一样都是访问XML文档的接口。DOM将xml解析成树状模型,结构清晰,操作方便,但是消耗内存。而SAX是将xml通读一遍,在读取过程中发现满足某个条件,就产生事件,然后处理事件,特点是省内存,但是无法随意访问某个节点。 SAX可以快速扫描一个

概述:

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在一些方面的对照:

SAX DOM
顺序读入文档并产生相应事件,可以处理任何大小的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/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读