У чому різниця між JAXP та JAXB?


Відповіді:


69

JAXP (Java API для обробки XML) - це досить застарілий загальний термін, що охоплює різні API низького рівня XML в JavaSE, такі як DOM, SAX та StAX.

JAXB (архітектура Java для прив'язки XML) - це специфічний API (матеріал під javax.xml.bind), який використовує анотації для прив'язки XML-документів до об'єктної моделі Java.


1
На додаток до синтаксичного аналізу (DOM, SAX тощо), я вважаю, що JAXP також включає API для таких завдань, як оцінка XPath, виконання перетворень XSLT та перевірка XML щодо схеми. Я пам’ятаю, як використовував javax.xml.validationкласи для перевірки вхідних запитів на XSD моєї служби, щоб допомогти клієнтам самостійно вирішувати проблеми.
spaaarky21

49

JAXP - це Java API для обробки XML, який надає нам платформу для синтаксичного аналізу файлів XML за допомогою синтаксичних аналізаторів DOM або SAX.

Оскільки JAXB є архітектурою Java для прив'язки XML, це полегшить доступ до XML-документів із програм, написаних мовою програмування Java.

Наприклад: Файл Computer.xml, якщо ми хочемо отримати доступ до даних за допомогою JAXP, ми виконаємо наступні кроки

  1. Створіть синтаксичний синтаксичний аналізатор SAX або синтаксичний аналізатор DOM, а потім ПАРАЙЗУЙТЕ дані, якщо ми використовуємо DOM, може знадобитися багато пам'яті, якщо документ занадто великий. Припустимо, якщо ми використовуємо синтаксичний аналізатор SAX, нам потрібно визначити початок документа. Коли він стикається з чимось значним (у термінах SAX, "подією"), таким як початок тегу XML або текст всередині тегу, він робить ці дані доступними для програми, що викликає.
  2. Потім створіть обробник вмісту, який визначає методи, про які сповіщає синтаксичний аналізатор, коли він зустрічає подію. Ці методи, відомі як методи зворотного виклику, здійснюють відповідні дії щодо отриманих даних.

Ті самі операції, якщо їх виконує JAXB, для доступу до Computer.xml потрібно виконати наступні кроки

  1. Прив’яжіть схему до XML-документа.
  2. Видаліть документ із об’єктів вмісту Java. Об'єкти вмісту Java представляють вміст та організацію XML-документа та безпосередньо доступні вашій програмі. Після зняття маршалінгу ваша програма може отримати доступ до даних XML-документа та відобразити їх, просто отримавши доступ до даних об’єктів вмісту Java, а потім відобразивши їх. Немає необхідності створювати та використовувати парсер і не потрібно писати обробник вмісту методами зворотного виклику. Це означає, що розробники можуть отримувати доступ до XML-даних і обробляти їх, не знаючи обробки XML або XML

DOM розглядає файл XML як об'єкт, де SAX обробляє окремі елементи як події, що є більш ефективним?
Malwaregeek

5
@Malwaregeek: Залежно від ситуації, SAX є кращим, якщо ви отримуєте доступ до всього XML у послідовному порядку, оскільки він займає менше пам'яті. DOM є кращим, якщо ви хочете довільний доступ середніх елементів у XML, але йому потрібно більше пам'яті. Цей баланс схожий на пам’ять проти балансу часу в кожній програмі
Rengasami Ramanujam

1

Ключова відмінність полягає в тому, яку роль відіграє схема xml. JAXP застарів, не знаючи про схему XML, тоді як JAXB обробляє прив'язку схеми як перший крок.


Підручник з JAXP ( JSR 206 ) у частині «Впровадження перевірки SAX» містить розділ, присвячений «Перевірка за допомогою схеми XML». У специфікації також згадується клас Schema як частина JAXP API. (Він був вилучений як самостійний проект після його включення до OpenJDK 7, див. Розділ 11.5 в специфікаційному PDF-файлі JAXP 1.6.)
Олів'є Кайо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.