Некоторое время назад была задача разбора гигабайтных размеров XML-файлов на PHP. Попробуем поискать нужные библиотеки:
SimpleXML
Первая мысль воспользоваться SimpleXML, однако её принцип работы основан на чтении всего файла целиком и разворачивании DOM-дерева в памяти. Очевидно такой код упрется в memory_limit.
DOM
Ситуация по использованию памяти такая же как и SimpleXML.
XML-анализатор
Это SAX-парсер — работает очень быстро, принцип прост и основан на «событиях», анализатор лишь сообщает «открылся элемент» либо «закрылся элемент». Однако за это придется платить, например для моей задачи пришлось бы написать некий стек, т.е. следить за вложенностью элементов, открытием/закрытием узлов и атрибутов. Из минусов еще библиотека достаточно старая и написана в процедурном стиле, также данное pecl-расширение редко встречается на хостингах.
XMLReader
Аналогично SAX-парсер, однако API удобнее и проще чем у XML-анализатора, вся логика сконцентрирована в одном классе. Расширение входит в стандартную поставку PHP и часто встречается на хостингах.
В итоге скрестил XMLReader и SimpleXML — получился SimpleXMLReader: репозиторий на github, пример использования.