alexanderk23/hybrid-xml-parser

Simple class to parse huge XML files in a memory-efficient way


Keywords
xml, parser
License
WTFPL

Documentation

Hybrid XML Parser

Класс для разбора больших XML-файлов без загрузки их в память. Схема работы проста: файл проходится XMLReader'ом, для каждого интересующего нас элемента XML вызывается предварительно заданный обработчик, которому в качестве аргумента передаётся содержимое этого элемента в виде SimpleXMLElement.

Выглядит это как-то так:

<?php
    $parser = new HybridXMLParser;
    $parser
        // Вешаем обработчик на путь в XML
        ->bind('/FictionBook/description/title-info/author', function(\SimpleXMLElement $author, $parser) {
            print_r($author);
        })
        // И ещё один
        ->bind('/FictionBook/description/title-info/translator', function(\SimpleXMLElement $translator, $parser) {
            print_r($translator);
            // Так можно немедленно завершить парсинг
            $parser->stop(); 
        })
        // Запускаем
        ->process('somebook.fb2')
        ->process('anotherbook.fb2');

В качестве обработчика можно указывать всё, для чего is_callable() возвращает true.