Подтвердить что ты не робот

JAXB против DOM и SAX

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

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

4b9b3361

Ответ 1

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.

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 6

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

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

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

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


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

Как выбрать:

  • Есть ли модель Java или загружаете ее из XML? это сериализация, просто используйте JAXB
  • Нет модели Java, время/пробел, простой однопроходный атрибут/элемент запроса, схема неизвестна? Использовать SAX
  • Нет модели Java и времени/пространства, но схема известна, неизменной и простой? Бросьте свое собственное, серьезно это тривиально (однако используйте XSD и JAXB и codegen для проверки вашей реализации).
  • Является ли схема XML неизвестной априори, подлежащая изменению без уведомления, или разрешает любые неизвестные (именные) расширения? Использовать DOM
  • Является ли схема XML заблокированной или она вам принадлежит? Использовать JAXB