两者依赖的解析机制是完全不同的。 sax解析,依赖于 事件触发机制,你可以认为我们在读取xml的时候,每遇到一个xml内容都会触发相应的事件,我们一行行的往下读,事件也自动的一个个的往下触发,一直到最终结束。代码中,我们则需要实现一个defaultHandler,来定义当xml读到什么内容时,进行什么样子的操作。sax解析,只能从文档头一直读到尾,中间不能停止也不能对文件进行修改。直到解析完了整个文档才会返回。
SAX解析。其特点为:
优点:不用实现调入整个文档,占用资源少。尤其在嵌入式环境中,如android,极力推荐使用SAX解析。 缺点:不像DOM解析一样将文档长期驻留在内存中,数据不是持久的。如果事件过后没有保存数据,数据就会丢失。 使用场合:机器有性能限制。 dom解析,则是通过在内存中形成一个节点树来完成xml解析,它虽然可以快速的定位xml中的某个位置,并且可以对其进行修改操作,但是它对内存的要求比较大。特别是当xml文件比较大的时候,这个缺点就更严重了。对于手机来说,这很致命。 SAX方式的特点是需要解析完整个文档才会返回,如果在一个XML文档中我们只需要前面一部分数据,但是使用SAX方式还是会对整个文档进行解析,尽管XML文档中后面的大部分数据我们其实都不需要解析,因此这样实际上就浪费了处理资源。 为了解决点这种缺陷,Android利用另一种更加高效方便的xml解析方式对xml文件进行解析,这就是Pull解析。 Pull解析器和SAX解析器虽有区别但也有相似性。他们的区别为:SAX解析器的工作方式是自动将事件推入注册的事件处理器进行处理,因此你不能控制事件的处理主动结束;而Pull解析器的工作方式允许你在应用程序代码中主动从解析器中获取事件,正因为是主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析;pull读取xml文件后触发相应的事件调用方法返回的是数字。