我有一个大约200MB的XML文件,我希望逐行提取所选信息。
我用perl编写了一个脚本,使用模块XML :: LibXML解析文件内容,然后循环内容并逐行提取信息。这是无效的,因为它将整个文件读入内存,但我喜欢LibXML,因为我可以使用我需要的信息的XPath位置。
我是否可以获得有关如何使我的代码更有效的建议。
通过搜索,我已经了解了XML :: SAX和XML :: LibXML :: SAX,但我找不到解释其用法的文档,它们似乎不包含任何类型的XPath寻址结构。
答案 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
。