Где я могу найти подробное сравнение фреймворков Java XML?

Я пытаюсь выбрать фреймворк обработки XML для своих проектов Java, и я теряюсь в именах ... XOM, JDOM и т. Д. Где я могу найти подробное сравнение всех популярных фреймворков Java XML?


person yegor256    schedule 04.10.2010    source источник
comment
У меня нет сравнений ... но вот список некоторых XML-процессоров в Java: java-source.net/open-source/xml-parsers   -  person Buhake Sindi    schedule 04.10.2010
comment
Обратите внимание, что некоторые из этих проектов парсеров не были активны в течение многих лет. Если вас интересует привязка объекта к XML, ознакомьтесь с MOXy JAXB (я технический руководитель), bdoughan.blogspot.com/2010/09/   -  person bdoughan    schedule 05.10.2010
comment
Вместо того, чтобы закрывать глаза, подумайте о переходе на softwarerecs.stackexchange.com   -  person Michael Freidgeim    schedule 11.04.2020
comment
Обновление 2019 г. baeldung.com/java-xml-libraries. Это старый вопрос, который все еще актуален в 2021 году.   -  person Raymond Chenon    schedule 21.06.2021


Ответы (2)


Как указал Блэз, придерживайтесь стандартов. Но за период было создано несколько стандартов для решения различных проблем / сценариев использования. Какой из них выбрать, полностью зависит от ваших требований. Я надеюсь, что приведенное ниже сравнение поможет вам выбрать правильный.

Теперь вам нужно выбрать две вещи. API и реализации API (их много)

API

SAX: Плюсы

  • на основе событий
  • эффективная память
  • быстрее, чем DOM
  • поддерживает проверку схемы

SAX: недостатки

  • Нет объектной модели, вам нужно подключиться к событиям и создать себя
  • Одиночный синтаксический анализ xml и может идти только вперед
  • только чтение api
  • нет поддержки xpath
  • немного сложнее использовать

DOM: Плюсы

  • объектная модель в памяти
  • сохраняет порядок элементов
  • двунаправленный
  • читать и писать api
  • xml МАНИПУЛЯЦИЯ
  • простой в использовании
  • поддерживает проверку схемы

DOM: минусы

  • потребление памяти для больших XML-документов (обычно используется для XML-документов размером менее 10 МБ)
  • помедленнее
  • общая модель, т.е. вы работаете с узлами

Stax: Плюсы

  • Лучшее из SAX и DOM, то есть простота DOM и эффективность SAX
  • эффективная память
  • Вытяните модель
  • читать и писать api
  • поддерживает подпарсинг
  • может читать несколько документов одновременно в одном потоке
  • параллельная обработка XML проще

Stax: против

  • нет поддержки проверки схемы (насколько я помню, не уверен, добавили ли они ее сейчас)
  • может идти только вперед, как саксофон
  • нет манипуляции с xml

JAXB: плюсы

  • позволяет получать доступ к данным XML и обрабатывать их, не зная XML
  • двунаправленный
  • более эффективная память, чем DOM
  • SAX и DOM - это общие парсеры, тогда как JAXB создает парсер, специфичный для вашего XML Schmea
  • преобразование данных: JAXB может преобразовывать XML в типы Java
  • поддерживает МАНИПУЛЯЦИЮ XML через объектный API

JAXB: минусы

  • может анализировать только действительный XML

Trax: для преобразования XML из одной формы в другую с помощью XSLT.

Реализации

SAX, DOM, Stax, JAXB - это просто спецификации. Существует множество коммерческих реализаций этих спецификаций с открытым исходным кодом. В большинстве случаев вы можете просто придерживаться того, что поставляется с JDK или вашим сервером приложений. Но иногда вам нужно использовать другую реализацию, которая предоставляется по умолчанию. И здесь вы можете оценить API-интерфейс оболочки JAXP. JAXP позволяет переключать реализации через конфигурацию без необходимости изменять код. Он также предоставляет независимый от парсера / спецификаций API для синтаксического анализа, преобразования, проверки и запросов XML-документов.

Производительность и другие сравнения различных реализаций


Сейчас стандарты хороши, но время от времени вы сталкиваетесь с этой сумасшедшей ситуацией, когда вам нужно поддерживать синтаксический анализ XML-документа размером 100 гигабайт или вам нужна сверхбыстрая обработка XML (возможно, вы реализуете микросхему синтаксического анализатора XML), и именно тогда вам нужно отказаться от стандартов и искать другой способ делать что-то. Речь идет об использовании правильного инструмента для правильной работы! И здесь я предлагаю вам взглянуть на vtd-xml

В первые дни SAX и DOM люди хотели более простые API, чем предоставляемые ими. JDOM, dom4j, XmlBeans, JiBX, Castor, как я знаю, стали популярными.

person Aravind Yarram    schedule 27.12.2010
comment
Реализации JAXB (JSR-222) не требуют схемы XML или этапа компиляции. Вот пример запуска из классов Java: blog.bdoughan. ru / 2012/07 / jaxb-no-annotations-required.html - person bdoughan; 25.09.2012
comment
Может ли джентльмен, проголосовавший против, объяснить причину, пожалуйста. - person Aravind Yarram; 02.11.2012
comment
Не доверяйте любой реализации! Черт возьми ... я был ... только что. Oracle JDK 8 Unit-Test на моем локальном компьютере анализирует строковое значение XML-узла следующим образом: 'vyFPEHYkvQNfrR6i', производственная система выдает это: [#text: vyFPEHYkvQNfrR6i]. Тот же источник. Сумасшедший! - person John Smith; 22.12.2016

@Pangea

JAXB против DOM и SAX

JAXB нельзя напрямую сравнивать с DOM и SAX. API-интерфейсы синтаксического анализа Java DOM и SAX представляют собой API-интерфейсы нижнего уровня для анализа XML-документов, а JAXB (API-интерфейс Java для привязки XML) представляет собой API-интерфейс более высокого уровня для преобразования элементов и атрибутов XML в иерархию объектов Java (и наоборот). Реализации JAXB, скорее всего, будут использовать парсер DOM или SAX за кулисами для фактического анализа входных данных XML.

person 14all41    schedule 12.05.2016