Сводка : Я ищу быстрый синтаксический анализатор XML (скорее всего, оболочку вокруг некоторого стандартного синтаксического анализатора SAX), который будет создавать структуру данных для каждой записи на 100% идентичную структуре, создаваемой XML :: Простой .
подробности :
У нас есть большая инфраструктура кода, которая зависит от обработки записей по одной и ожидает, что запись будет структурой данных в формате, созданном XML :: Simple, поскольку она всегда использовала XML :: Simple с начала юры.
Пример простого XML:
<root>
<rec><f1>v1</f1><f2>v2</f2></rec>
<rec><f1>v1b</f1><f2>v2b</f2></rec>
<rec><f1>v1c</f1><f2>v2c</f2></rec>
</root>
И примерный код:
sub process_record { my ($obj, $record_hash) = @_; # do_stuff }
my $records = XML::Simple->XMLin(@args)->{root};
foreach my $record (@$records) { $obj->process_record($record) };
Поскольку все знают XML: Simple, ну, в общем, просто. И что еще более важно, он очень медленный и занимает много места в памяти - из-за того, что он является DOM-парсером и ему необходимо создавать / хранить 100% данных в памяти. Таким образом, это не лучший инструмент для анализа XML-файла, состоящего из большого количества небольших записей запись за записью.
Однако переписать весь код (который состоит из большого количества методов, похожих на «process_record») для работы со стандартным парсером SAX кажется большой задачей, не стоящей ресурсов, даже ценой жизни с XML: :. Простой
Я ищу существующий модуль, который, вероятно, будет основан на синтаксическом анализаторе SAX (или любом быстром с небольшим объемом памяти), который можно использовать для создания $record
хеш-ссылок по одному на основе приведенного выше XML-кода, который может будет передан в $obj->process_record($record)
и будет на 100% идентичен тому, что было бы в хеш-кодах XML :: Simple.
Мне все равно, какой интерфейс у нового модуля; например, нужно ли мне позвонить next_record()
или дать ему код обратного вызова, принимающий запись.