Возможно, вы захотите взглянуть на xmlTextReader «потокового» интерфейса libxml2 .
Это движущийся вперед курсор, который отбрасывает входные данные, которые он уже обработал, и не создает большой, интенсивно использующий память DOM при движении вперед.Запросы XPath по-прежнему могут использоваться с ограничением, что поддеревья должны быть расширены (то есть скопированы в структуры libxml в памяти) для частей документа, которые должны быть найдены.
Интерфейс xmlTextReader намного более утомителенчем просто выбросить несколько запросов XPath в корневой элемент, но для документа такого размера на устройстве с ограниченным объемом памяти это может быть лучшим выбором.
Я только что закончил преобразование в xmlTextReader для аналогичногопричин, и память, используемая во время обработки XML, идентична для документов размером 20 КБ и 30 МБ.