我们有一个新的要求:
有一些大的xml文件不断进入我们的系统,我们需要使用java立即快速地处理它们。文件很大,但我们处理所需的信息在一个非常小的元素中。。。
在我们开始处理之前,从大文件中提取这一小部分数据的最佳方法是什么。如果我们试图加载整个文件,我们会立即得到内存不足的错误,由于大小。在java中,我可以使用什么有效的方法来获取..数据..数据..数据。。不逐行加载或读取文件的数据元素。有没有sax解析器可以用来完成这个任务?
谢谢您
我们有一个新的要求:
有一些大的xml文件不断进入我们的系统,我们需要使用java立即快速地处理它们。文件很大,但我们处理所需的信息在一个非常小的元素中。。。
在我们开始处理之前,从大文件中提取这一小部分数据的最佳方法是什么。如果我们试图加载整个文件,我们会立即得到内存不足的错误,由于大小。在java中,我可以使用什么有效的方法来获取..数据..数据..数据。。不逐行加载或读取文件的数据元素。有没有sax解析器可以用来完成这个任务?
谢谢您
4条答案
按热度按时间dfddblmv1#
好吧,如果你想读取文件的一部分,你需要读取文件的每一行,以便能够识别感兴趣的部分,然后提取你需要的。
如果只需要一小部分传入的xml,可以使用sax,或者如果只需要读取特定的元素或属性,可以使用xpath,这将更易于实现。
java附带了一个内置的saxparser实现和一个xpath实现。在这里找到saxparser的javadocs,在这里找到xpath的javadocs。
gxwragnw2#
stax是另一个基于数据流的选项,与sax类似,但它的好处是使用更友好的方法(imo)来处理数据,即“拉”出您想要的数据,而不是将其“推”给您。
gfttwv5a3#
sax解析器是基于事件的,而且速度更快,因为它们执行您需要的操作:它们不完全读取xml文档。有一个
SAXParser
在java发行版中提供。bttbmeg04#
在以前的一个项目(1g-2g)中,我不得不解析大量文件,不想使用sax。我发现sax在某些情况下太低级了,在大多数情况下像keepings一样是一种遍历方法。
我用过vtd图书馆http://vtd-xml.sourceforge.net/. 它是一个非常快速的库,使用指针在文档中导航。