Это не отличное решение, но просто добавить другой вариант:
Вы можете разбить много больших XML-файлов на куски, особенно те, которые на самом деле представляют собой просто списки похожих элементов (как я подозреваю, файл, с которым вы работаете).
например, если ваш документ выглядит так:
<dmoz>
<listing>....</listing>
<listing>....</listing>
<listing>....</listing>
<listing>....</listing>
<listing>....</listing>
<listing>....</listing>
...
</dmoz>
Вы можете читать его по одному или по два, искусственно оборачивая несколько полных тегов <listing>
, которые вы загрузили в тег корневого уровня, а затем загружать их через simplexml / domxml (я использовал domxml, когда использовал этот подход ).
Честно говоря, я предпочитаю такой подход, если вы используете PHP <5.1.2. Начиная с версии 5.1.2, доступен XMLReader, что, вероятно, является наилучшим вариантом, но до этого вы застряли либо с вышеуказанной стратегией разбиения на блоки, либо со старой библиотекой SAX / expat. И я не знаю о вас, но я НЕНАВИЖУ писать / поддерживать парсеры SAX / expat. </p>
Обратите внимание, однако, что этот подход на самом деле НЕ практичен, когда ваш документ не состоит из множества идентичных элементов нижнего уровня (например, он отлично работает для любого вида списка файлов или URL-адресов). и т. д., но не имеет смысла разбирать большой HTML-документ)