Обработка большого XML-файла с помощью Perl - PullRequest
6 голосов
/ 15 февраля 2011

У меня есть файл XML размером около 200 МБ, я хочу извлекать выбранную информацию построчно.

Я написал скрипт на Perl, используя модуль XML :: LibXML для анализа содержимого файла, а затем зацикливания содержимого и извлечения информации построчно. Это неэффективно, так как считывает весь файл в память, но мне нравится LibXML, так как я могу использовать XPath-адреса нужной мне информации.

Могу ли я получить предложения о том, как сделать мой код более эффективным.

Благодаря поиску я узнал о XML :: SAX и XML :: LibXML :: SAX, но я не могу найти документацию, объясняющую использование, и они, похоже, не включают в себя какой-либо тип структуры адресации XPath.

Ответы [ 2 ]

15 голосов
/ 15 февраля 2011

Рассматривали ли вы модуль XML :: Twig , который гораздо более эффективен для обработки больших файлов, как указано в описании модуля CPAN :

ИМЯ

XML :: Twig - Perl-модуль для обработки огромных документов XML в режиме дерева.

SYNOPSIS

...

Это позволяет минимально использовать ресурсы (ЦП и память), создавая дерево только для тех частей документов, которые требуют фактической обработки, посредствомиспользование параметров twig_roots и twig_print_outside_roots.

...

1 голос
/ 25 августа 2014

Мне повезло с XML::Twig, но в итоге XML :: LibXML :: Reader , что намного быстрее ... Вы также можете проверить XML::LibXML::Pattern, если вам нужно использовать XPath.

...