Если вы хотите полностью обработать XML-документ, анализ XML в DOM почти всегда будет наименее эффективным с точки зрения времени десериализации, использования ЦП и использования памяти.
Для анализа DOM требуется примерно в 10-15 раз больше памяти, поскольку для документа XML требуется место на диске. Например, XML-документ объемом 1 мегабайт будет анализироваться в DOM, занимая 10-15 мегабайт памяти.
Анализировать DOM можно только в том случае, если вы собираетесь изменить некоторые или все данные, а затем поместить результат обратно в XML-документ. Для всех других случаев использования DOM является плохим выбором.
XPath часто значительно менее ресурсоемок, но это зависит от длины документа (т. Е. Сколько у вас элементов childNode) и расположения в документе данных, которые вас интересуют.
Использование памяти XPath и время завершения имеют тенденцию увеличиваться по мере продвижения по документу. Например, допустим, у вас есть XML-документ с 20 000 элементов childNode, каждый childNode имеет уникальный идентификатор, который вы знаете заранее, и вы хотите извлечь известный childNode из документа. Для извлечения 18 345-го дочернего узла потребовалось бы гораздо больше, чем для третьего.
Так что, если вы используете XPath для извлечения всех элементов childNode, вы можете найти его менее эффективным, чем синтаксический анализ в DOM. Обычно XPath - это простой способ извлечь часть XML-документа. Я бы не рекомендовал использовать его для обработки всего документа XML.
Безусловно, наилучшим подходом, если вы действительно хотите извлечь и обработать все данные в XML-документе, было бы использование читателя на основе SAX. Это будет на несколько порядков быстрее и менее ресурсоемким, чем любой другой подход.
Тем не менее, это также зависит от объема данных, с которыми вы имеете дело. Для приведенного вами примера XML-документа вы не заметите никакой практической разницы. Да, DOM будет «медленным», а SAX - «быстрым», но мы говорим о миллисекундах или микросекундах.
SAX может быть в сотни или тысячи раз быстрее, чем DOM, однако, если это разница между 2 микросекундами и 2 миллисекундами, вы не заметите. Когда вы работаете с документом, содержащим 20 000 элементов childNode, 2 секунды по сравнению с 200 секундами станут большей проблемой.