SAX解析与DOM解析比较

来源:互联网 发布:php urlencode 符号 编辑:程序博客网 时间:2024/05/22 01:29
 

java库提供了两种XML解析器,一种是文档对象模型,一种是用于XML的简单API,前者将读入的XML文档转换成树结构,后者在读入XML文档时生成相应的事件。在现实使用当中,应该使用哪一种?
       一般情况下,如果要处理较大的文档,用DOM形式时因生成树结构将会消耗大量内存,但是在实际运用当中,如果关心元素之间的联系时,因树形结构提供了对它们上下文的访问操作,文档对象模型应该说是首选。如果只是对文档中个别元素感兴趣,在文档较大的时候,为了减少内存开销,采用SAX解析器应该算是比较好的一种选择,它在运行时解析结点,不必看到所有的树型结构,它在解析XML输入的构件时就报告事件,但不会以任何方式存储文档,由事件处理器决定是否要建立数据结构。要在这两者之间作出选择,就在于实际情况。但是如何划分这两者之间的取舍界线呢?

       对于经常提到的大文档,多大算大?对个别元素感兴趣,如果只对个别元素感兴趣,那么在项目设计当中,我想一般也不会因为个别元素的原因而专一建个XML文档中,就说可能是对用处较多的大文档偶尔对其中的个别元素感兴趣而进行特别的程序设计编码,对于在使用大文档较多的地方,想必会考虑到个别元素的特别设计,因为在此处的运用当中应该会留有对个别元素的特别访问?

    java库提供的文档对象模型解析器是建立在SAX解析器的基础之上的,它在接受到SAX解析器事件时建立DOM树,运用DOM的好处我想应该是:
  1.对上下文访问方向。2。对元素操作的方便性上。DOM模型较SAX的优势我想也应该是在这一方面,没有人愿意在操作大文档的时候采用SAX的烦锁操作(相对于DOM而言)。
    面向对象的程序设计其一的目的就在于方便,在方便的同时不忘性能优化,有时候越是方便操作,性能就越低,方便的实现就目前看来好像是在拿性能开刀,再优化,那也是多了几个调用过程。
    我应该用哪一个呢?曾经想在项目中根据自己的需求,利用SAX解析器编制适合自己的控件,但是在多人开发中显得不那么现实,早就听人说,程序员“懒”是出了名的,哪个用着方便就用哪个,dom4j想必就是程序员从周公那借来的小飞车:).

大项目经验的人士:你们好,请就这方面多多给些建议