StAX (или парсеры pull) будут работать лучше для описанного вами варианта использования.DOM читает весь документ, парсеры SAX генерируют события, которые вам нужно обработать, они ничего не записывают в память (кроме своих внутренних).С SAX вам нужно написать обработчик контента, который реализует определенные методы , и это также подразумевает, что вам нужно поддерживать состояние потока событий.Например, первый кусок документа, который вы опубликовали, будет генерировать следующие (упрощенные) события:
startDocument
startElement(note)
startElement(Desc)
startElement(to)
characters(Tove) // might come as multiple chunks
endElement(to)
...
endDocument
, поэтому вам нужно проверить в startElement, если имя тега body
(если вы хотите только body
элементы, которые находятся в note -> Desc
, тогда вам нужно отслеживать все элементы начала / конца) и установить флаг.В characters
, если флаг имеет значение true, соберите текстовое содержимое тега (или запишите его на диск).Кроме того, в endElement
флаг должен быть установлен в false, чтобы избежать сбора символов из других тегов.