对于大于15 GB的文件,您可以选择哪种Perl XML Parsers?

时间:2009-10-19 19:10:28

标签: xml perl parsing

我知道有一些非常好的Perl XML解析器,如XML::XercesXML::Parser::ExpatXML::Simple,XML :: RapidXML,XML::LibXMLXML::Liberal

您将选择哪个XML解析器来解析大文件以及您将选择哪个参数而不是另一个?如果您要选择的那个不在列表中,请建议。

7 个答案:

答案 0 :(得分:14)

如果你正在解析那个大小的文件,你会想要避免任何试图在内存中加载整个文档并构造一个DOM(域对象模型)的解析器。

相反,寻找一个SAX样式解析器 - 将输入文件视为流,在遇到事件和属性时引发事件。这种方法允许您逐步处理文件,而不必立即将整个内容保存在内存中。

答案 1 :(得分:9)

使用15 GB的文件,您的解析器必须是基于SAX的,因为有了这样的文件大小,只需能够处理数据就是您的首要任务。

我建议你阅读XML::SAX::Intro

答案 2 :(得分:5)

SAX解析器是一种选择。其他不涉及将整个文档加载到内存中的选项是XML::TwigXML::Rules

答案 3 :(得分:4)

为了解析这些文件,我总是使用XML::Parser。简单,随处可访,运作良好。

答案 4 :(得分:3)

您还可以考虑使用带有XML扩展的数据库(有关示例,请参阅here)。您可以将XML数据批量加载到数据库中,然后可以对该数据执行SQL查询(或XQueries)。

答案 5 :(得分:3)

正如您所料,我会建议使用XML::Twig,这样可以让您逐块处理文件。当然,这假设您可以通过这种方式处理文件。它可能比SAX更容易使用,因为您可以使用类似DOM的方法为每个块处理树。

另一种方法是使用pull parser mode,这与XML :: Twig提供的有点类似。

答案 6 :(得分:2)

我要去上面的tster答案的变异版本。将血腥的东西加载到DB中(如果可能,通过直接XML导入,如果没有,通过使用SAX解析器来解析文件并生成可加载的数据集)。然后,使用DB作为数据存储。在15G,你正在超越应该在DB之外操作的数据大小。

相关问题