Quelle est la meilleure classe de Java pour travailler avec des documents XML? P>
12 Réponses :
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. P>
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. P>
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");
J'ai eu la chance avec Jaxb . Il est inclus dans Java SE 6. P>
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.
Je préfère utiliser une combinaison classique de DOM et de SAX. P>
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 . p>
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. P>
comme Nat a souligné, il y a aussi
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.
Si vous ne faites que lire, alors XPath est un bon pari. Sinon, le DOM (dans le org.w3c.dom code> package) est votre meilleur pari. P>
"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.
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. P>
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. P>
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. P>
Peut-être que vous avez besoin d'objets marshal / morshal sur le fil. JAXB est candidat à cela, de même que d'autres options. P>
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. P>
Cela dépend vraiment de ce que vous voulez faire avec le document XML et de la taille des documents. P>
grossièrement, vous pouvez classer les API XML comme suit: p>
Certaines options disponibles sont les suivantes: p>
+1 pour: Cela dépend "- et de ce que cela dépend de.
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. ;) p>
Vous devez regarder dans le SaxReader. P>
@epaga, si vous ne mettez pas "meilleur" dans le contexte, vous échouerez de manière misérablement. p>
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. P>
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. P>
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 i> énorme et il existe plus de remplaçants tiers.