有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中高效解析200000个XML文件?

我有200000个XML文件要解析并存储在数据库中

下面是一个例子:https://gist.github.com/902292

这和XML文件一样复杂。这也将在小型VPS(Linode)上运行,因此内存很紧

我想知道的是:

1)我应该使用DOM还是SAX解析器?由于每个XML都很小,DOM似乎更容易、更快

2)关于上述解析器的简单教程在哪里?(DOM或SAX)

谢谢

编辑

我尝试了DOM路线,尽管每个人都建议使用SAX。主要是因为我找到了一个关于DOM的“更简单”教程,我认为由于平均文件大小约为3k-4k,所以可以轻松地将其保存在内存中

然而,我编写了一个递归例程来处理所有的200k文件,它得到了大约40%的路径,然后Java耗尽了内存

这是项目的一部分。 https://gist.github.com/905550#file_xm_lparser.java

我现在应该抛弃DOM,只使用SAX吗?看起来DOM应该能够处理这么小的文件

此外,速度“足够快”。解析2000个XML文件(在Mongo插入之前)大约需要19秒

谢谢


共 (2) 个答案

  1. # 1 楼答案

    StAX比SAX快,这比DOM快得多。如果性能非常关键,您还可以考虑构建一个特殊的编译器来解析XML文件。但通常情况下,词法分析和解析不是StAX的主要问题,而是“后处理”

  2. # 2 楼答案

    用萨克斯或者斯塔克斯。忘了多姆吧。使用像aalto这样的有效库

    我确信,与数据库请求相比,解析将非常便宜

    但是,如果你只需要做一次,20万并不是一个很大的数字