SAX стоит рассмотреть вместо парсера DOM.
С DOM вы платите за загрузку документа, но как только загруженные данные могут быть доступны и быстро обновлены.
С SAX вы должны писать обработчики для begin-element, end-element и т. Д., Но у вас гораздо больше гибкости в том, что вы делаете в процессе работы.
Хотя это, вероятно, не помогает вашей ситуации, SAX очень полезен, когда вы ищете, потому что вы можете остановить анализ в любой точке, поэтому, как только вы найдете то, что вы хотели, вы можете остановить.
Если вашей программе не нужно анализировать все данные, прежде чем она узнает, какие изменения внести, вы могли бы написать обработчики SAX, которые просто обновляли данные, когда они читались, и в противном случае передавали их, поэтому она скорее потратила бы данные чем необходимость загружать все это в какую-либо структуру памяти. Это сделало бы решение очень масштабируемым, поскольку вы не столкнетесь с ограничениями памяти очень большими файлами.
Для чего бы то ни было, я склонен использовать парсеры MSXML DOM и SAX. Можно утверждать, что они не самые эффективные, я утверждаю, что, вероятно, больше людей работают над их улучшением, поэтому они будут становиться все лучше и лучше.