转自:http://blog.csdn.net/wanyanblog/article/details/6088289
方式
|
模型
|
原理
|
说明1
|
说明2
|
Tree-based API
|
DOMJDOM DOM4j
|
把xml文件读入,变成DOM模型的一棵树,然后查找获取自己想要的东西
|
Xml文件很大时会占用很大内存。
|
即速度慢,占用内存大
|
Event-based API
|
PUSH: SAX
|
Application被parser控制了(Observer模式)
|
SAX只能读xml文件。速度比dom快,但仍不理想
|
Xml文件很大时,又不需要进行随机查找的时候,适合采用此方式
|
PULL:StAX
|
Application控制了parser(Iterator模式)
|
SAX不但能读xml还能写xml。速度很快
|
一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree-based API,比如说DOM,JDOM,DOM4j等等. 一般来说,读取配置文件时,我们一般比较喜欢应用tree-based API这种方式,就是把xml文件读入,变成DOM形式的一棵树,然后进行查找,获取自己说想要的东西. 但是,这种方式有个缺点,那就是如果你这个XML文件很大的话,你需要占用很大的内存.
所以对于很大的一个xml文件,又不需要进行随机查找的时候,比较适合采用event-based API,那就是说他解析xml文件,如果是START_ELEMENT,那么他就调用startElement()的回调方法..他遍历过了就过了,不能再回去.
在event-based API中又存在两种方式: 一个是PUSH的方式,就比如说是SAX. 另外一种是PULL的方式,比如StAX.
怎么来理解PUSH和PULL的区别呢. 先假设有这么三个角色: application, xmlFile, xmlParser. 那么,如果我们采用PUSH的方式,步骤为:
1. 创建一个xmlParser.
2. 把我们的application处理xml的注册到xmlParser.
3. xmlParser遍历xmlFile,然后来调用application.
这里面,用的是Observer的模式,就是接收到event的时候,去调用event的callback函数, 这里面有个很不好的地方就是,你application反而是被Parser控制了.
于是,就出现了PULL方式的解析.
1. 创建一个xmlParser
2. xmlParser打开一个xmlFile
3. application调用这个xmlParser, 来获取xmlParser打开xmlFile所得到的一系列event.
这里,用到了Iterator的模式. 最主要的一点是: 这个时候application控制了xmlParser.
StAX有两种API,一种是cursor-based,一种是iterator-based. 这两种详细的比较参考:http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP3.html#wp102139
这里,SAX和StAX的另外一点区别是: SAX只能读xml文件. StAX不但能读xml文件,而且还能写xml文件.
传统的处理XML的API有DOM和SAX两种,DOM速度慢,占用内存极大。SAX虽然比DOM快,但速度任不理想。现在,一种新的基于流的 Stream API for XML(简称 StAX)极大地提高了XML的处理速度,并且已经称为JSR 173标准(http://www.jcp.org/en/jsr/detail?id=173)。目前,StAX最好的开源实现是Woodstox(http://woodstox.codehaus.org/),它完整地支持StAX
API。Resin3.1也内置了StAX的实现,但是并没有支持所以的StAX API。XFire在ClassPath上如果找到了StAX API的定义,就会试图定位一个StAX的实现。
===================
分享到:
相关推荐
与上一个版本一起使用可以可以起到提高效率的目的。本人解析xml的真实文档
Java 解析XML性能分析Demo。包含了DOM解析,SAX解析, JDOM解析,DOM4J解析,JAXB解析例子。
digester解析xml的问题.pdf
XML解析工具类,通用解析,简化XML解析难度,提高XML解析效率
利用tinyxml2解析XML读取数据 此工程为本人测试tinyxml2解析XML读取数据的效率进行的一个小测试程序
在JAVA中有两种常见的XML解析方式,DOM和SAX,DOM在解析的时候会将所有的数据一次性载入内存中进行解析,在数据量比较大的情况下,效率非常低.尤其在手机这种对内存和性能要求比较苛刻的设备里面这种方法并不可取. ...
dom4j是现在见到的解析xml效率最高的jar包,并且支持XPath定位,xml schema验证等功能。
这是一个通用的xml解析项目,数据的效率很大的提高.
比原生的解析要易用很多,简单效率,是解析XML的很好的选择,推荐大家使用
jar包,jdom 用于java 解析 xml文档,快速的解析 xml 提高开发效率
SAX 解析: 这是苹果系统自带的xml解析方法,特点就是:逐行解析, 这样方式效率低,但是可以快速的判断定位到哪一行出错。 DOM解析:全局解析,效率高,但是不容易定位到出错的位置。 3.个人总结 ...
使用dom4j高效率xml解析,内涵demo程序,idea导入即可运行,适用于各种复杂xml的解析,给自己留作备份,有需要可下载。
Mini-XML是一个小型的开源的XML解析器,采用 C 语言开发。该解析器最大的特点就是小型、无须依赖其他类库,只需要 GCC 编译器 和 make 程序即可编译,支持 UTF-8/UTF-16 编码。Mini-XML支持读取UTF-8和UTF-16和UTF-8...
使用woodstax+jaxb进行xml的流解析,包括解析类,解析文件,所需jar包,带注解的实体类。提高了解析效率,减少了内存消耗。
把VTD-XML和一些流行的XML解析器就性能和内存使用方面作一比较。通过时延和吞吐率来呈现XML解析性能。从时延方面比较了VTD-XML和DOM(不支持延迟节点扩展特性)的浏览性能。VTD-XML的性能与其他解析器相比优势明显,...
使用DOM4j技术快速解析XML文件,提高开发效率
这样不但效率低下,对一些特征不明显的xml元素很难取到。如果直接用xml来匹配就不存在这个问题了。并且可以基于本框架进行快速脚本开发。本贴不需要你学习怎么查找对应xml元素,源码里已经集成了。虽然XML并不困难。...
DOM方式解析xml是先把xml文档都读到内存中,然后再用DOMAPI来访问树形结构,并获取数据的,但是这样一来,如果xml文件很大呢?手机CPU处理能力当然不能与PC机器比,因此在处理效率方面就相对差了,当然这是对于其他...
一个小demo展示xml的两种解析方式和四种解析方法,以及使用XStream进行javaBean与xml、json之间的转换
当前效率最高,用的最广泛的开源python解析xml接口文档。