8
votes

Meilleur cours de manutention XML en Java

Quelle est la meilleure classe de Java pour travailler avec des documents XML?


3 commentaires

Il est étrange que la plupart des cadres Java reposent fortement sur XML, mais Java, la langue, a si peu de support XML par rapport au python, par exemple.


Notez que le langage de programmation s'appelle "Java", et ce n'est pas un acronyme, il ne faut donc pas être écrit avec toutes les lettres majuscules "Java".


Python a un support XML pauvre pauvre dans sa bibliothèque standard. Les meilleures bibliothèques (par exemple LXML) sont par des tiers. Java est dans le même bateau, seules ses bibliothèques XML standard sont à la fois pauvres et énorme et il existe plus de remplaçants tiers.


12 Réponses :


1
votes

Je pense que c'est JDOM pour une facilité d'utilisation.


0 commentaires

0
votes

Il y a beaucoup de bibliothèques qui vous permettent de gérer XML de différentes manières et que personne n'est "meilleur". Comme toujours, cela dépend de ce que vous essayez de faire et quelles sont vos exigences.

Lorsque j'ai besoin d'un parseur de type Dom, ou pour la construction de documents XML, j'aime personnellement XOM comme Il garantit que les documents XML sont bien formés et "corrects". Sa priorité numéro une est exacte, qui est importante lorsqu'il est interopérant avec d'autres systèmes, quelque chose que XML fait très bien. Son API est également très bien conçu et intuitif, faisant des opérations communes très faciles.


0 commentaires

3
votes

Je trouve DOM4J pour sortir de tout ce que j'ai utilisé (surtout JDOM, que je trouver avoir une API particulièrement pauvre). DOM4J permet de brancher Jaxen pour le support XPath.

Exemples: P>

   SAXReader reader = new SAXReader(); // dom4j SAXReader  
   Document document = reader.read(xmlInputStream); // dom4j Document  

   // select all link nodes with href "http://example.com"  
   List<Element> linkNodes = document.selectNodes("//link[@href='http://example.com']");  

   // select an attribute value  
   String val = linkNodes.get(0).attributeValue("href");  

   // select element text and trim it  
   String value = document.elementTextTrim("childNode");  


0 commentaires

1
votes

J'ai eu la chance avec Jaxb . Il est inclus dans Java SE 6.


2 commentaires

Jaxb est une solution de liaison OXM, pas un analyseur XML général. Il utilise un analyseur XML, mais ce n'est pas un seul.


Oui, mais la question n'était pas sur le général General XML Parser. C'était "qui est la meilleure classe de Java pour travailler avec des documents XML?". Et Jaxb est définitivement l'une des alternatives.



0
votes

Je préfère utiliser une combinaison classique de DOM et de SAX.


0 commentaires

0
votes

Vous devez décider entre deux approches différentes de la transformation XML: il y a DOM et < Un href = "http://fr.wikipedia.org/wiki/simple_api_for_xml" rel = "Nofollow NOREFERRER"> SAX , à la fois avec des avantages et des inconvénients. Tout dépend de vos besoins et de la taille du document XML que vous souhaitez traiter. Le déjà mentionné Jaxb construit une API ci-dessus et est expédiée avec Java 6 .

Lorsque vous avez compris ce qui précède, vous voudrez peut-être concrétiser votre question et peut-être demander le meilleur DOM ou la meilleure mise en œuvre du SAX. À côté de cela, ce serait bien si vous pouviez dire à utiliser quelles sont vos exigences. Voulez-vous écrire ou lire XML? Quelle sera la taille des fichiers? Et ainsi de suite.

EDIT:

comme Nat a souligné, il y a aussi Stax en tant que troisième concept alternatif.


2 commentaires

Il y a aussi Stax, qui est bas comme Sax, mais permet au code client tirer des événements XML à partir d'un flux plutôt que de gérer les événements qui lui ont poussé à partir de l'analyseur. Cela facilite l'écriture d'analyseurs de descente récursive pour traiter le contenu XML.


@Nat: jamais utilisé ça, merci pour la pointe! Je viens de modifier ma réponse et inclus un lien.



0
votes

Si vous ne faites que lire, alors XPath est un bon pari. Sinon, le DOM (dans le org.w3c.dom package) est votre meilleur pari.


1 commentaires

"meilleur" n'est pas défini comme le plus facile à comprendre et à coder, alors. Et je vois des interfaces dans org.w3c.dom, vous avez donc encore besoin d'une implémentation de quelque sorte.



0
votes

Java a un bon soutien pour XML. Le problème dans un sens est qu'il y a tellement d'options. Donc, il n'y a pas une solution unique qui est "le" moyen de gérer XML en Java. Vous devez choisir vos outils en fonction du problème à la main.

Disons que vous avez des documents validés complexes que vous souhaitez charger dans un arbre d'objet que vous pouvez ensuite interroger et manipuler l'arborescence. Vous voudrez un analyseur DOM pour cela et il existe un numéro à choisir. Cela convertit l'ensemble du document en objets, ce qui peut être coûteux en termes de processeur.

Dites que vous avez un document dans lequel vous souhaitez sélectionner certains éléments et que la performance est un problème. Essayez un analyseur SAX, un analyseur de traction ou XPath.

Peut-être que vous avez besoin d'objets marshal / morshal sur le fil. JAXB est candidat à cela, de même que d'autres options.

Alors, il n'y a pas de bonne réponse à votre question. Comme avec tout problème de [programmation], vous devez examiner le problème, évaluer les options et choisir le meilleur outil pour le travail.


0 commentaires

19
votes

Cela dépend vraiment de ce que vous voulez faire avec le document XML et de la taille des documents.

grossièrement, vous pouvez classer les API XML comme suit:

  • DOM API - chargez tout le document dans la mémoire, ce qui limite la taille du document que vous pouvez traiter, mais peut alors créer des structures optimisées pour la navigation et la transformation
  • API de streaming - Votre application doit interpréter les événements d'analyse de niveau bas (par exemple, début de l'élément, fin de l'élément, etc.) mais que vous n'êtes pas limité par la mémoire. Il y a deux types d'API en streaming - poussez et tirez. Poussez les analyseurs Feu d'analyse des événements à un objet que vous définissez et que cet objet doit garder une trace de l'état d'analyse actuel, avec une machine à états ou une pile, par exemple). Tirez les analyseurs laissez votre application tirer des événements de l'analyseur. Cela facilite l'écriture d'un analyseur de descente récursif pour traiter la teneur en XML, mais la taille de la pile devient une limite de la taille du document que vous pouvez traiter.
  • MAPPERS XML - Contenu de la carte XML aux objets Java. Il existe deux approches principales pour la cartographie XML: code-gen ou réflexion. Code-Gen Mappers génère des classes Java à partir d'un schéma XML, ce qui signifie que vous n'avez pas à dupliquer la structure de schéma au code Java, mais a l'inconvénient que votre code Java reflète exactement la structure de schéma. Aussi la plupart des générateurs de code créent nojo classes qui sont maladroits pour travailler avec et n'ont aucun comportement propre. Les mappeurs réfléchissants vous permettent d'écrire des classes Java avec un comportement riche, puis de définir comment ils sont mappés vers / de XML. Si vous devez vous conformer à un schéma prédéfini, vous devrez vous assurer que vos classes et votre configuration de mappage sont correctes W.R.T. ce schéma.

    Certaines options disponibles sont les suivantes:

    • DOM API: Les API DOM de la bibliothèque standard sont standard (évidemment!) et donc interopérez avec d'autres bibliothèques, mais elles sont affreuses. Il existe plusieurs API de type DOM plus pratiques, telles que XOM (mon préféré pour les mêmes raisons que Adam Batkin donne ci-dessus) ou JDOM . Regardez quelques-uns et décidez de l'API que vous préférez.
    • API en streaming: la bibliothèque standard contient une implémentation de l'analyseur de poussoir SAX. L'analyseur de pull standard pour Java est Stax .
    • API de cartographie: Jaxb est une norme JSR mais je préfère XStream Parce que je peux séparer plus facilement la configuration de mappage des classes mappées (pas besoin d'annotations ou de configuration XML) et il mesure des objets à / à partir d'autres formats de données .

1 commentaires

+1 pour: Cela dépend "- et de ce que cela dépend de.



0
votes

Chaque fois que j'avais besoin de travailler avec des documents XML, j'ai toujours pensé à Dom4j / SAX en tant que première station, et cela ne me laisse jamais tomber. ;)

Vous devez regarder dans le SaxReader.


0 commentaires

0
votes

@epaga, si vous ne mettez pas "meilleur" dans le contexte, vous échouerez de manière misérablement.

Par exemple, une tentative de chargement d'un énorme XML dans une structure Dom comme serait très stupide. Vous devez sélectionner l'outil judicieusement.


0 commentaires

0
votes

xom ( http://www.xom.nu ) est une boîte à outils XML flexible et flexible que je ont trouvé plus simple et plus facile à utiliser que de nombreux autres analyseurs. Depuis la passation des outils standard W3C basés sur la W3C, ma productivité a considérablement augmenté. Dans ses pages Web, l'auteur Elliotte Rusty Harold explique pourquoi la conception de XOM est le modèle approprié pour un DOM XML.


0 commentaires