Jaka jest różnica między JAXP a JAXB?


Odpowiedzi:


69

JAXP (Java API for XML Processing) to dość przestarzały ogólny termin obejmujący różne niskopoziomowe API XML w JavaSE, takie jak DOM, SAX i StAX.

JAXB (Java Architecture for XML Binding) to specyficzny interfejs API (zawartość poniżej javax.xml.bind), który używa adnotacji do wiązania dokumentów XML z modelem obiektowym Java.


1
Uważam, że oprócz analizowania (DOM, SAX itp.), JAXP zawiera również interfejsy API do zadań takich jak ocena XPath, wykonywanie transformacji XSLT i sprawdzanie poprawności XML w odniesieniu do schematu. Pamiętam, javax.xml.validationże używałem klas do sprawdzania poprawności przychodzących żądań względem XSD mojej usługi, aby pomóc klientom w samodzielnym rozwiązywaniu problemów.
spaaarky21

49

JAXP to Java API do przetwarzania XML, która zapewnia nam platformę do analizowania plików XML za pomocą parserów DOM lub SAX.

Ponieważ JAXB jest architekturą Java dla powiązań XML, ułatwi to dostęp do dokumentów XML z aplikacji napisanych w języku programowania Java.

Na przykład: plik Computer.xml, jeśli chcemy uzyskać dostęp do danych za pomocą JAXP, wykonamy następujące kroki

  1. Stwórz SAX Parser lub DOM Parser, a następnie PARse the data, jeśli używamy DOM, może to wymagać dużej ilości pamięci, jeśli dokument jest zbyt duży. Załóżmy, że jeśli używamy parsera SAX, musimy zidentyfikować początek dokumentu. Gdy napotka coś istotnego (w terminologii SAX, „zdarzenie”), takie jak początek znacznika XML lub tekst wewnątrz znacznika, udostępnia te dane aplikacji wywołującej.
  2. Następnie utwórz procedurę obsługi treści, która definiuje metody, które mają być powiadamiane przez analizator składni, gdy napotka zdarzenie. Metody te, zwane metodami wywołania zwrotnego, wykonują odpowiednie działania na otrzymywanych danych.

Te same operacje, jeśli są wykonywane przez JAXB, należy wykonać następujące kroki, aby uzyskać dostęp do pliku Computer.xml

  1. Powiąż schemat dla dokumentu XML.
  2. Przywróć dokument do obiektów treści Java. Obiekty treści Java reprezentują treść i organizację dokumentu XML i są bezpośrednio dostępne dla programu. Po cofnięciu odczytu program może uzyskać dostęp do danych w dokumencie XML i wyświetlić je, po prostu uzyskując dostęp do danych w obiektach treści Java, a następnie je wyświetlając. Nie ma potrzeby tworzenia i używania parsera ani pisania procedury obsługi treści z metodami wywołania zwrotnego. Oznacza to, że programiści mogą uzyskiwać dostęp do danych XML i przetwarzać je bez znajomości przetwarzania XML lub XML

DOM traktuje plik XML jako obiekt, gdzie SAX traktuje poszczególne elementy jako zdarzenia, co jest bardziej wydajne?
Malwaregeek

5
@ Malwaregeek: To zależy od sytuacji, SAX jest preferowany, jeśli uzyskujesz dostęp do całego XML w kolejności sekwencyjnej, ponieważ zajmuje mniej pamięci. DOM jest preferowany, jeśli chcesz mieć swobodny dostęp do środkowych elementów w XML, ale potrzebuje więcej pamięci. Ta równowaga jest podobna do równowagi między pamięcią a przestrzenią czasową w każdym programie
Rengasami Ramanujam

1

Kluczowa różnica polega na tym, jaką rolę odgrywa schemat xml. JAXP jest przestarzały bez znajomości schematu XML, podczas gdy JAXB obsługuje powiązanie schematu jako pierwszy krok.


Samouczek JAXP ( JSR 206 ), w części „Implementowanie walidacji SAX” , zawiera sekcję poświęconą „Walidacji za pomocą schematu XML”. Specyfikacja wymienia również klasę Schema jako część interfejsu JAXP API. (Został wycofany jako samodzielny projekt po włączeniu do OpenJDK 7, patrz sekcja 11.5 w specyfikacji PDF JAXP 1.6.)
Olivier Cailloux
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.