您推荐哪种 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/