就目前来说,有三种方式可以解析XML文件:DOM、SAX、StAX。DOM将整个XML文件加载到内存中,并构建出节点树;应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点、属性等信息;这种方式便于对XML节点的添加修改等,而且解析也很方便,然后它比较耗费内存,解析速度也不快。SAX则是基于事件的解析,解析器在一次读取XML文件中根据读取的数据产生相应的事件,由应用程序实现相应的事件处理逻辑,即它是一种“推”的解析方式;这种解析方法速度快、占用内存少,但是它需要应用程序自己处理解析器的状态,实现起来会比较麻烦,而且它只支持对XML文件的读取,不支持写入。不同于SAX的“推”的解析方式,StAX是基于“拉”的解析方式,即应用程序根据自己的需要控制解析器的读取;这种方式继承了SAX解析速度快、占用内存少等优点,同时它好保持了接口简单、编程容易等特点;不过它也应该不支持写XML文件的,木有仔细看过这个框架,先猜测一下~~。貌似DOM底层采用了SAX的实现,因而本文首先介绍基于SAX方式的XML文件解析。
SAX的解析框架相对比较简单,以下是它核心类关系图: