SAX
sax分析器在对xml文档进行分析时,触发一系列的事件,应用程序通过事件处理函数实现对xml文档的访问.
因为事件触发是有时序性的,所以sax分析器提供的是一种对xml文档的顺序访问机制,对于已经分析过的部分,
不能再重新倒回去处理.
sax分析器在实现时,只是顺序地检查xml文档中的字节流,判断当前字节是xml语法中的哪一部分,检查是否符合
xml语法并且触发相应的事件.对于事件处理函数的本身,要由应用程序自己来实现.
同DOM分析器相比,sax分析器对xml文档的处理缺乏灵活性,但对于只访问xml文档中的数据而不改变应用程序
来说,sax分析器的效率会很高.
sax对内存要求也比较低.
优点:无需将整个文档加载到内存中,所以内存消耗少.
推模型允许注册多个contentHandler.
缺点:没有内置的文档导航支持.
不能随机访问xml文档.
不支持原地修改xml.
不支持名字空间作用域.
DOM
DOM分析器把整个xml文档以一棵树的形式放在内存中,应用程序可以随时对DOM树中的任何一个部分进行访问
与操作.通过DOM树,应用程序可以随机访问.
这种访问方式给程序开发带来了很大的灵活性,可以任意地控制整个xml文档中的内容.
但是DOM对内存的需求比较高,并且效率也不是很理想.
优点:丰富的API集合,可以轻松导航.
整个DOM树加载到内存,允许随机访问.
缺点:整个xml文档必须一次解析完.
整个DOM树都加载到内存中,内存要求高.
一般的DOM节点对于必须为所有节点创建对象的对象类型绑定不太理想.
JDOM
JDOM是处理xml的纯java api.使用具体类而不是接口.JDOM具有树的遍历,又有SAX的java规则.
优点:是基于树的处理xml的java api,把树加载到内存中.
没有向下兼容的限制,所以比DOM简单.
速度快.
具有SAX的java 规则.
缺点:不能处理大于内存的文档.
JDOM表示XML文档逻辑模型,不能保证每个字节真正变换.
针对实例文档不提供DTD与模式的任何实际模型.
不支持于DOM中相应遍历包.
DOM4J
dom4j有更复杂的api,所以dom4j比jdom有更大的灵活性.