DOM、SAX、JDOM、DOM4J以及PULL在XML文件解析中的工作原理以及优缺点对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SEU_Calvin/article/details/52027484

 

1.  DOMDocument Object Model)文档对象模型
(1)DOM是W3C指定的一套规范标准,DOM的核心是按树形结构处理数据,DOM解析器读入XML文件并在内存中建立一个结构一模一样的树,可以指定要访问的元素,进行随机访问,随意修改XML文件。尤其是向前处理时非常容易

(2)DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中。从而消耗很大的内存空间

 

2.  SAXSimple API for XML)用于XML的简单API

(1)SAX是基于事件驱动的,以类似于流的形式读取XML文件,也就是说读入文档的过程和解析的过程是同时进行的。因此甚至不必解析整个文档而在某个条件达到满足时停止解析,因此占用较少的内存

SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现指定的TAG的时候,可以激活一个回调方法,告诉该方法指定的标签已经找到。当某个事件被触发时,才获取相应的XML的部分数据

(2)SAX只能对XML进行读取,而且不能在文件中插入数据

(3)SAX对于已经解析过的部分,不能再重新倒回去处理。因此同DOM解析相比,SAX缺乏灵活性

 

3.  JDOM

DOM&SAX是解析xml的底层接口。而JDOM和DOM4J则是基于底层API的更高级封装类。(DOM是通用的,而JDOM和DOM4J则是面向java语言的)

(1)JDOM是基于树的,处理XML的Java API,把树加载到内存中,因此不适合处理大文档。但是和DOM主要有两方面不同。

第一JDOM是使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Java集合类,便于Java开发者使用。

(2)JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档。它包含一些转换器将JDOM表示成SAX2事件流、DOM模型或XML文本文档。 

 

4.  DOM4J

DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和容易使用的特点。特别值得一提的是大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。

(1)DOM4J大量使用接口,有更复杂的API所以DOM4J比JDOM有更大的灵活性大量使用了Java集合类,方便Java开发人员

(2)缺点就是API过于复杂。

 

5.  PULL

PULL技术已经被集成到Android系统中,所以在使用PULL的时候不需要额外引入到jar

PULL提供了类似SAX的事件处理机制,但是SAX解析器的工作方式是自动将事件推入注册的事件处理器进行处理,而Pull解析器允许你的代码从解析器中主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析

Android系统中和Pull方式相关的包为org.xmlpull.v1,在这个包中提供了Pull解析器的工厂类XmlPullParserFactory和Pull解析器XmlPullParser,前者实例调用newPullParser方法创建后者实例,接着后者实例就可以调用getEventType()和next()等方法依次主动提取事件,并根据提取的事件类型进行相应的逻辑处理

 

6. 总结

(1)如果XML文档较大且不考虑移植性问题建议采用DOM4J;

(2)如果XML文档较小则建议采用JDOM;如果需要及时处理而不需要保存数据则考虑SAX。

(3)Android中用PULL比较多,毕竟是系统集成的。

本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52027484

没有更多推荐了,返回首页