使用perl处理大型xml文件

时间:2011-02-15 16:30:04

标签: xml perl sax libxml2

我有一个大约200MB的XML文件,我希望逐行提取所选信息。

我用perl编写了一个脚本,使用模块XML :: LibXML解析文件内容,然后循环内容并逐行提取信息。这是无效的,因为它将整个文件读入内存,但我喜欢LibXML,因为我可以使用我需要的信息的XPath位置。

我是否可以获得有关如何使我的代码更有效的建议。

通过搜索,我已经了解了XML :: SAX和XML :: LibXML :: SAX,但我找不到解释其用法的文档,它们似乎不包含任何类型的XPath寻址结构。

2 个答案:

答案 0 :(得分:15)

您是否考虑过XML::Twig模块,这对于大型文件处理来说效率更高,因为它在CPAN模块描述中说明:

NAME

  

XML :: Twig - 用于的perl模块   处理巨大的XML文档   树模式。

概要

  

...

     

它允许最少的资源(CPU和   内存)通过构建树的用法   仅适用于文件的各个部分   需要实际处理,通过   使用twig_roots和   twig_print_outside_roots选项。

     

...

答案 1 :(得分:1)

我对XML::Twig感到很幸运,但最终得到了XML::LibXML::Reader,速度要快得多......如果您需要使用XPath,也可以查看XML::LibXML::Pattern