论坛首页 Java企业应用论坛

大容量XML文件解析辅助--xml批量分解

浏览 12289 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-15  
现在我也碰到了这个问题.
在贵帖中挖掘一些思路.
0 请登录后投票
   发表时间:2009-03-16  
sax解析的话,会出现数据不完整的问题,因为它每次读取的时候是2048的长度,这样可能一个完整句子,就被截断了,严重影响数据的质量

dom4j有一个类似sax的方法,也是基于事件触发机制的,每次只读出一段,然后在内存中形成一个树,一段一段的读,性能上来看是挺好的,但是我试的时候,速度会稍微慢点,这是dom4j官方网站上faq上推荐的(http://www.dom4j.org/dom4j-1.6.1/faq.html#large-doc)

dom4j还是很强大的,它提供了很多的实现方式,有兴趣可以一个个试一下

提示:很多人对dom4j有误解,以为用了dom4j,就跟dom不一样了,其实如果是用一般资料上介绍的方法,它跟dom是类似的,读取文件的时候,在内存中形成整棵树,数据量大了,就oom了
0 请登录后投票
   发表时间:2009-03-16  
Digester也是基于事件模型的,应该可以解决你这个问题,不过我没有试过。
Digester对SAX的事件模型进行了扩展,采用Stack来存储当前元素信息,调用方法非常简单,楼主可以试试看。
0 请登录后投票
   发表时间:2009-03-16  
引用

StAX提供的定位机制  还没碰过   谢谢您的提示  


StAX技术的思路主要是通过streaming的方式读取XML流,然后你可以读取“流”中的一系列事件,如startElement, endElement等等,在每个事件中你可以读取一系列属性。针对这一特点,如果能够根据具体的XML文档结构,在你需要解析的节点上创建解析器,最大的好处就是高效解析巨大的XML文档:一边读取XML,遇到特定的节点的解析器才解析。
0 请登录后投票
   发表时间:2009-03-18  
stax 提供的事件接口与 SAX 的event-based API 解决的问题是一样的,都是基于事件的,你说的startElement是sax 的event-based API。

stax 在解析xml上更强大些!

在别人的blog看到几篇介绍stax,有兴趣的可以去看看!写的很细心啊!

这边是Eastsun大哥的文章
http://eastsun.iteye.com/blog/129887 
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics