Анализатор DOM, аналогично анализатору JDom, загружает весь ресурс XML в память, чтобы предоставить вам экземпляр Document
, позволяющий перемещаться по элементам XML.
Некоторые ссылки здесь :
Стандарт DOM является кодифицированным стандартом для модели документа в памяти.
И здесь :
JDOM работает с логическим деревом XML в памяти,
И DOM, и JDom используют синтаксический анализатор SAX для чтения ресурса XML, но используют его только для хранения всего содержимого в экземпляре Document
что они возвращаются.Действительно, с Dom и JDom клиенту никогда не нужно предоставлять обработчик для перехвата событий, запускаемых синтаксическим анализатором SAX.
Обратите внимание, что и DOM, и JDom не обязаны использовать SAX для внутреннего использования.
Они используют их главным образом, поскольку стандарт SAX уже существует, и поэтому имеет смысл использовать его для сообщения об ошибках.
Мне нужно убедиться, что я не загружаю весь файл в память.
У вас есть две модели программирования для работыс XML: потоковая передача и объектная модель документа (DOM).
Вы ищете первый.
Поэтому используйте синтаксический анализатор SAX , предоставив свой обработчик для обработки событий, генерируемых синтаксическим анализатором SAX (startDocument()
, startElement()
и т. Д.) Или в качестве альтернативы взгляните на более пользователядружественный API: STAX (потоковый API для XML):
Как API в семействе JAXP, StAX можно сравнить среди других API с SAX, TrAX и JDOM, Из последних двух StAX не такой мощный и гибкий, как TrAX или JDOM, но он также не требует столько памяти или загрузки процессора, чтобы быть полезным, и StAX во многих случаях может превзойти API на основе DOM s.Те же самые аргументы, изложенные выше, сравнивая затраты и выгоды модели DOM с моделью потоковой передачи, применимы здесь.