JAXB против DOM и SAX - PullRequest
       1

JAXB против DOM и SAX

22 голосов
/ 10 октября 2011

Я уже некоторое время использую DOM для анализа моих маленьких XML-документов. После прочтения о JAXB (http://www.oracle.com/technetwork/articles/javase/index-140168.html), Я планирую использовать JAXB вместо DOM.

Пожалуйста, дайте мне знатьесли это будет правильный подход.

Ответы [ 6 ]

64 голосов
/ 10 октября 2011

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

Часто вам захочется преобразовать содержимое документа XML в объекты в Javaпрограмма.Если это то, что вы хотите сделать, то JAXB, вероятно, будет проще в использовании, и вам нужно будет писать меньше кода, чем при использовании API синтаксического анализа DOM или SAX.

Является ли это правильным подходомдля вашего случая зависит именно то, каковы функциональные и технические требования для вашего проекта.

4 голосов
/ 28 июля 2017

(~ 7 лет слишком поздно, но все же)

Чтобы противоречить принятому ответу, я очень сомневаюсь, что JAXB реализован поверх DOM - для этого потребуются две объектная модель s (Java и DOM) и будет полностью преодолен смысл привязки XML ( XB в JAXB) хуже для производительности / пространства, это потребовало бы, чтобы обе модели поддержали друг друга.

Мне кажется, JAXB - это четкий аналог DOM при рассмотрении подходов к обработке двунаправленного отображения XML в Java. DOM и JAXB - это просто примеры того, что IBM называет XOM .

Почти во всех случаях я бы предпочел JAXB, а не DOM, и предпочел бы ручную обработку, а не SAX, в первую очередь потому, что я считаю, что SAX и DOM API "не зависят от языка" и являются совершенно гротескными.


Очевидно, что если ваш набор данных слишком велик, чтобы поместиться в память, тогда объектная модель будет нежизнеспособной. В противном случае

Как выбрать:

  • Имеете модель Java или загружаете ее из XML? это сериализация, просто используйте JAXB
  • Нет модели Java, первостепенное значение времени / пространства, простой однопроходный атрибут / запрос элемента, схема неизвестна? Используйте SAX
  • Нет модели Java и первостепенного значения времени / пространства, но схема известна, неизменна и проста? Сверните, серьезно, это тривиально (однако для проверки реализации используйте XSD, JAXB и codegen)
  • Является ли схема XML неизвестной априори, может быть изменена без уведомления или разрешает произвольные неизвестные (с расширением имен) расширения? Используйте DOM
  • XML-схема заблокирована или вам принадлежит? Используйте JAXB
4 голосов
/ 25 февраля 2014

JAXB, расшифровывается как Java Architecture для XML Binding. JAXB используется для Marshalling (объекты Java в представлениях XML) и Unmarshalling (содержимое XML для объекта Java)

Пожалуйста, перейдите по этой ссылке для хорошего понимания JAXB Architecture

3 голосов
/ 07 июня 2012

JAXB будет легко из-за меньшего количества написания кода.Но если вам нужно больше контроля при разборе, вам следует использовать SAX-парсер.Это дает вам больше контроля над синтаксическим анализом и работает быстрее, чем анализатор DOM.Кроме того, JAXB - это высокоуровневый API, поэтому у него есть некоторая служебная задача, поэтому он будет немного медленнее, чем SAX.

2 голосов
/ 15 января 2014

JAXB не поддерживает XPath. Вам нужна схема для генерации API. Если у вас есть неизвестный или потенциально плохой XML, ваша программа завершается ошибкой проверки. Не подходит для устойчивой к ошибкам обработки XML, если требуется только синтаксический анализ без проверки. Не подходит для обработки неизвестного XML и поиска известных структур узлов внутри. Навигация в сложных XML-структурах порождает много плохо читаемого кода.

Если вы используете JAXB, вы реализуете фиксированное соединение между XML-структурой и вашим Java-кодом. Если XML изменился, вы должны изменить свой код и развернуть его. Может быть больно. Если вы используете XPath, вы можете завершить разделение XML-структуры и Java-кода, если XPath находится во внешней конфигурации.

0 голосов
/ 10 октября 2011

Проверьте это сообщение Что такое JAXB и зачем мне его использовать? Всегда лучше использовать JAXB поверх обычного парсера DOM и SAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...