Синтаксический анализ XML DOM с использованием Flyweight Design

Обработка XML-документов в Java с использованием DOM может быть чрезмерно интенсивной памятью для документов, которые содержат большое количество повторяющихся узлов, атрибутов или значений.

Кто-нибудь знает API Java XML DOM, который использует шаблон flyweight внутри, чтобы свести к минимуму объем памяти? Может быть, даже настроить / включить / отключить?

3 ответа

Вы действительно имели в виду модель в полулегком весе? Или думал о чем-то вроде ленивой загрузки (или, может быть, "ленивого разбора")? Использование шаблона flyweight потребует от синтаксического анализатора распознавания элементов, имеющих одинаковое содержимое (и структуру). Это было бы трудоемкой операцией (и я боюсь, это также заняло бы много места). Кроме того, на какой глубине парсер должен начинать распознавать весы?

На самом деле, я не могу себе представить, что есть какой-нибудь DOM-парсер, распознающий мухи. И также не будет парсера DOM, использующего ленивую загрузку. Такова природа DOM: проанализируйте весь XML-файл и создайте структуру данных для очень гибкой и случайной навигации.

Возможно, вы действительно можете переключиться на потоковый процесс, используя SAX или StAX. Конечно, вы потеряете способность гибкой и случайной навигации, поскольку теперь вы должны обрабатывать элементы "на лету".

Однако есть синтаксический анализатор VTD-XML. Это было разработано с учетом эффективности использования памяти. Он также загружает весь XML-файл в память и предоставляет некоторые методы для навигации по элементам. Но имейте в виду: эта навигация несколько сложна и не очень интуитивна (из-за природы эффективного хранения памяти). Но, возможно, это то, что вы могли бы использовать.

Я не знаю такого парсера DOM (это не значит, что он не существует). Однако, возможно, парсер StAX будет близок к тому, что вы ищете.

Это не DOM, но SAX(javax.xml.parsers.SAXParser) должен быть полезным.

Разбор XML-файла с использованием SAX

Другие вопросы по тегам