概述:
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适于处理下面的问题:
- 对大型文档进行处理。
- 只需要文档的部分内容,或者只需要从文档中得到特定信息。
- 想创建自己的对象模型的时候。
DOM适于处理下面的问题: