web-dev-qa-db-fra.com

JAXB vs DOM et SAX

J'utilise DOM pour analyser mes petits documents xml depuis un certain temps.Après avoir lu sur le JAXB ( http://www.Oracle.com/technetwork/articles/javase/index-140168.html ), Je prévois d'utiliser JAXB instaed de DOM.

Veuillez me faire savoir si ce sera une bonne approche.

23
Habin

JAXB n'est pas directement comparable à DOM et SAX. Les API Java DOM et SAX sont des API de niveau inférieur pour analyser les documents XML, tandis que JAXB (Java API for XML Binding) est une API de niveau supérieur pour convertir les éléments et attributs XML en a = Java hiérarchie d'objets (et vice versa). Les implémentations de JAXB utiliseront très probablement un analyseur DOM ou SAX en arrière-plan pour effectuer l'analyse réelle des données d'entrée XML.

Souvent, vous voudrez convertir le contenu d'un document XML en objets dans votre programme Java. Si c'est ce que vous voulez faire, alors JAXB sera probablement plus facile à utiliser et vous aurez besoin d'écrire moins de code que lorsque vous utiliseriez l'API d'analyse DOM ou SAX.

Que ce soit la bonne approche pour votre cas dépend exactement des exigences fonctionnelles et techniques de votre projet.

65
Jesper

(~ 7 ans trop tard, mais quand même)

Pour contredire la réponse acceptée, je doute fortement que JAXB soit implémenté au dessus de DOM - cela nécessiterait deux Object Model s (Java et DOM) et irait complètement à l'encontre du point de liaison XML (le [~ # ~] xb [~ ​​# ~] dans JAXB) pire pour les performances/l'espace, il faudrait que les deux modèles se soutiennent mutuellement .

Il me semble que JAXB est un analogue clair du DOM lorsque l'on envisage des approches pour gérer le mappage bidirectionnel XML en Java. DOM et JAXB ne sont que des exemples de ce qu'IBM appelle XOM .

Dans presque tous les cas, je privilégierais JAXB par rapport à DOM, et privilégierais le contrôle manuel par rapport à SAX - principalement parce que je trouve que le "langage agnostique" de l'API SAX et DOM est totalement grotesque.


Évidemment, si votre ensemble de données est trop volumineux pour tenir dans la mémoire, un Object Model n'est pas viable. Autrement

Comment choisir:

  • Vous avez un modèle Java, ou en chargez-vous un à partir de XML? C'est la sérialisation, utilisez simplement JAXB
  • Non Java, primordial temps/espace, simple interrogation simple d'attribut/élément, schéma inconnu? Utiliser SAX
  • Non Java modèle et temps/espace primordial mais le schéma est connu, immuable et simple? Faites le vôtre, sérieusement c'est trivial (cependant utilisez un XSD et JAXB et codegen pour tester votre implémentation)
  • Le schéma XML est-il inconnu a priori, est-il susceptible d'être modifié sans notification ou autorise-t-il des extensions arbitraires inconnues (avec espace de noms)? Utiliser DOM
  • Le schéma XML est-il verrouillé ou vous en êtes propriétaire? Utilisez JAXB
4
earcam

JAXB, signifie Java Architecture for XML Binding. JAXB est utilisé pour le Marshalling (objets Java en représentations XML) et Unmarshalling (contenu XML en Java)

veuillez suivre ce lien pour bien comprendre JAXB Architecture

4
Mohasin Ali

JAXB sera facile du moins d'écriture de code. Mais si vous avez besoin de plus de contrôle sur l'analyse, vous devez utiliser l'analyseur SAX. Il vous donne plus de contrôle sur l'analyse et plus rapidement que l'analyseur DOM. En dehors de cela, JAXB est une API de haut niveau, il a donc une tâche supplémentaire, donc il sera un peu plus lent que SAX.

3
Forhad

JAXB ne prend pas en charge XPath. Vous avez besoin d'un schéma pour générer l'API. Si vous avez un XML inconnu ou potentiellement mauvais, votre programme se termine par une erreur de validation. Pas bon pour le traitement XML tolérant aux erreurs, si vous ne souhaitez que l'analyse syntaxique et non la validation. Pas bon pour le traitement de XML inconnu et la recherche de structures de nœuds connues à l'intérieur. La navigation dans des structures XML compliquées produit beaucoup de mauvais code lisible.

Si vous utilisez JAXB, vous implémentez un couplage fixe entre la structure XML et votre Java. Si XML est modifié, vous devez changer votre code et le déployer. Cela peut être pénible. Si vous utilisez XPath, vous pouvez découplage complet de la structure XML et Java, si XPath est en configuration externe.

2
Gerd