java - XML:处理大数据

标签 java xml xslt blackberry large-files

您推荐哪种 XML 解析器用于以下目的:

XML 文件(格式化,包含空格)大约为 800 MB。它主要包含三种类型的标签(我们称它们为 n、w 和 r)。 它们有一个名为 id 的属性,我必须尽快搜索它。

删除我不需要的属性可以节省大约 30%,也许更多。

第一部分用于优化第二部分:是否有任何好的工具(如果可能,命令行 linux 和 windows)可以轻松删除某些标签中未使用的属性?我知道可以使用 XSLT。或者有什么简单的选择吗?另外,我可以将它分成三个文件,每个标签一个,以便为以后的解析提高速度...... 对于这种数据准备,速度并不是太重要,当然,如果只需要几分钟而不是几小时就更好了。

第二部分:一旦我准备好数据,无论是否缩短,我都应该能够搜索我提到的 ID 属性,这是时间紧迫的。

使用 wc -l 的估计告诉我大约有 3M 个 N 标签和大约 418K 个 W 标签。后者每个最多可包含大约 20 个子标签。 W-Tags 也包含一些,但它们会被剥离。

“我所要做的”就是在包含某些 id 属性的标签之间导航。一些标签引用了其他 id,因此给了我一棵树,甚至可能是一张图。原始数据很大(如前所述),但结果集不应太大,因为我只需要挑选出某些元素。

现在的问题是:对于这种处理,我应该使用什么 XML 解析库?我会首先使用 Java 6,并考虑将其移植到 BlackBerry。

创建一个平面文件索引 id 并指向文件中的偏移量可能有用吗?甚至有必要做上半部分提到的优化吗?或者是否有已知的解析器与原始数据一样快?

小提示:为了测试,我将 id 放在文件的最后一行并使用 grep 搜索 id。这在 Core 2 Duo 上花费了大约一分钟。

如果文件变得更大,比如 5 GB,会发生什么情况?

我很感激任何通知或建议。 非常感谢大家,并问候

最佳答案

正如 Bouman 所指出的,将其视为纯文本处理将为您提供尽可能快的速度。

要将其作为 XML 进行处理,唯一实用的方法是使用 SAX 解析器。 SAX 解析器中构建的 Java API 完全能够处理此问题,因此无需安装任何第三方库。

关于java - XML:处理大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301926/

相关文章:

c++ - 将具有多个值的 XML 属性加载到不同的表格单元格

XML 命名空间、模式验证 (XSD) 和 XSLT

java - 'C :\' in CMD, 文件名、目录名或卷标语法不正确

operating-system - Java 可移植性不同 OS/JDK

android - 影响 TextView 的 Res/Arrays

xml - 你如何添加图像?

html - 使用 XSLT 设置内联文本样式和嵌套标签

java - 在 JLayeredPane 中使用 GridBagLayout

java.lang.NoSuchMethodError : org. apache.commons.logging.LogFactory

c# - 将 XML 文件读入 DataTable 的代码