用Java解析大型XML文件

时间:2012-05-09 19:53:14

标签: java xml

  

可能重复:
  Looping over a large XML file

什么是解析大型XML数据的更好方法,这些数据本质上是基于Java和Java的框架中的XML数据集合?我们从一个运行到几MB(通常是25MB +)的webservice调用中获取数据。该数据基本上对应于未编组的对象列表。我的目标是从XML创建对象列表。

我尝试使用SAX解析器,需要45秒才能解析这3000个对象。

其他推荐方法有哪些?

4 个答案:

答案 0 :(得分:2)

尝试使用pull解析,使用StAX? 第一次搜索比较: http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html

您是否了解并了解了瓶颈所在?

StAX内置于java(自java 6开始),但有些人推荐使用woodstox StAX实现更好的性能。我没有尝试过。 http://woodstox.codehaus.org/

答案 1 :(得分:1)

  

我尝试使用SAX解析器,解析需要45秒   这3000个物体。其他推荐的方法是什么?

只有以下选项:

DOM  
SAX  
StAX  

SAX是最快的SAXvsDOMvsStax所以如果你换成不同的风格,我认为你不会得到任何好处。
除非你现在做错了什么 当然还有编组/解组框架,如JAXB等,但是IMO(没有做任何测量)它们可能会慢一点,因为在XML处理上添加了额外的抽象层

答案 2 :(得分:0)

SAX不提供对XML文件结构的随机访问,这意味着SAX提供了一种相对快速有效的解析方法。因为SAX解析器一次只处理一个元素,所以实现可以非常节省内存,因此它通常是处理大文件的唯一选择。

答案 3 :(得分:0)

解析25Mb的XML不应该花费45秒。还有其他事情要发生。也许大部分时间都花在等待外部DTD从网上获取,我不知道。在更改方法之前,您需要了解成本的来源,以及系统的哪些部分将从变更中受益。

但是,如果你真的想将XML转换为Java对象(不是我会选择的应用程序架构,但没关系),那么JAXB听起来不错。我没有使用JAXB,因为我更喜欢坚持使用面向XML的语言,比如XSLT和XQuery,但是当我尝试使用JAXB时,我发现它非常快。当然它下面使用了SAX或StAX解析器。

相关问题