Если у вас огромные объемы данных, главное - не загружать их все в память сразу (потому что она будет использовать огромный объем памяти и предотвращает перекрытие операций ввода-вывода и обработки).К сожалению, я считаю, что большинство DOM и DOM-подобных библиотек (например, DOM4J) делают именно это, поэтому они не очень хорошо подходят для эффективной обработки огромного количества XML.
Вместо этого обратите внимание на использование потокового API, такого как SAXили StAX.По моему опыту, StAX обычно проще в использовании.
Существуют и другие API, которые пытаются повысить удобство работы с DOM с производительностью SAX.Javolution может быть одним; VTD-XML - это другое.Но, честно говоря, я считаю, что с StAX довольно легко работать - это в основном фантастический поток, поэтому вы просто думаете точно так же, как если бы вы читали текстовый файл из потока.
Одна вещь, которую вы могли быПопробуйте объединить JAXB с StAX.Идея состоит в том, что вы передаете файл в потоковом режиме с помощью StAX, а затем используете JAXB, чтобы демаршировать фрагменты в нем.Например, если вы обрабатывали фид Atom , вы могли бы открыть его, прочитать за заголовком, а затем работать в цикле, отсеивая элементы entry
по объектам по одному за раз.Это действительно работает, только если ваш формат состоит из последовательности независимых элементов, таких как Atom;это было бы бесполезно для чего-то более богатого, например, XHTML.Вы можете увидеть примеры этого в справочной реализации JAXB и в блоге парня .