4

我们有一个新要求:

有一些 BIG xml 文件不断进入我们的系统,我们需要立即使用 Java 快速处理它们。该文件很大,但我们处理所需的信息在一个非常小的元素内。……

在我们开始处理之前,从大文件中提取这小部分数据的最佳方法是什么?如果我们尝试加载整个文件,由于大小,我们将立即出现内存不足错误。我可以使用Java中的有效方法来获取 ..data..data..data.. 数据元素而无需逐行加载或读取文件。是否有任何 SAX 解析器可以用来完成这项工作?

谢谢

4

4 回答 4

4

SAX 解析器是基于事件的并且速度更快,因为它们可以满足您的需求:它们不会完全读取 xml 文档。SAXParserJava 发行版中有一个可用的。

于 2012-08-24T19:19:48.877 回答
3

我不得不在以前的项目(1G-2G)中解析大文件,并且不想使用 SAX 来处理。我发现 SAX 在某些情况下太低级,并且在大多数情况下喜欢保持遍历方法。

我使用了 VTD 库http://vtd-xml.sourceforge.net/。这是一个非常快速的库,它使用指针在文档中导航。

于 2012-08-24T20:16:45.243 回答
2

好吧,如果您想读取文件的一部分,需要读取文件的每一行才能识别感兴趣的文件部分,然后提取您需要的内容。

如果您只需要传入 XML 的一小部分,您可以使用 SAX,或者如果您只需要读取特定的元素或属性,您可以使用 XPath,这将更容易实现。

Java 带有一个内置的 SAXParser 实现以及一个 XPath 实现。在这里找到 SAXParser和 XPathjavadocs 。

于 2012-08-24T19:25:01.660 回答
2

StAX是另一种基于流数据的选项,如 SAX,但受益于更友好的方法 (IMO),通过“拉”您想要的而不是“推”给您来处理数据。

于 2012-08-24T20:13:17.920 回答