首页| 论坛| 消息

标题:domsaxstream 的区别
作者:ppdayz
日期:2011-03-31 11:08
内容:

刚刚在看QT XML的例子,里面有3个关于xml的例子,都是关于书签的,分别是dombookmarks, saxdombookmarks和 streamdombookmarks ,功能都差不多,开始搞不明白有什么区别,去查了下,搞明白了,希望给大家节约点时间,不用去查了,就现分享下
原文地址:http://hi.baidu.com/shaobz/blog/item/5f5886880a2ab4749f2fb401.html

传统的处理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的解析方式(DOM,SAX,StAX)
一般来说,解析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. 那么 ..


#1 [XChinux 09-02 08:37]
注意,http://woodstox.codehaus.org/
这个网站已失效,下面是一些说明:
https://projectmanagernews.com/general/most-important-projects-codehaus/

回复 发表
主题 版块