Je cherche dans la bibliothèque java pour analyser XML (fichiers de configuration et de données complexes), j'ai un peu cherché sur Google mais je n'ai pas trouvé d'autre que dom4j (on dirait qu'ils travaillent sur V2) .. J'ai regardé la configuration des communs mais je n'ai pas Je n'aime pas ça, D'autres projets Apache sur XML semblent en hibernation. Je n'ai pas évalué dom4j par moi-même mais je voulais juste savoir - Java a-t-il d'autres (bonnes) bibliothèques d'analyse XML open source? et comment est ton expérience avec dom4j?
Après la réponse de @ Voo, permettez-moi d'en poser une autre - Dois-je utiliser les classes intégrées de java ou toute bibliothèque tierce comme dom4j .. Quels sont les avantages?
Réponses:
En fait, Java prend en charge 4 méthodes pour analyser le XML hors de la boîte:
DOM Parser / Builder: La structure XML entière est chargée en mémoire et vous pouvez utiliser les méthodes DOM bien connues pour travailler avec elle. DOM vous permet également d'écrire dans le document avec des transformations Xslt. Exemple:
SAX Parser: uniquement pour lire un document XML. L'analyseur Sax parcourt le document et appelle les méthodes de rappel de l'utilisateur. Il existe des méthodes pour le début / la fin d'un document, d'un élément, etc. Ils sont définis dans org.xml.sax.ContentHandler et il existe une classe d'assistance vide DefaultHandler.
StAx Reader / Writer: Cela fonctionne avec une interface orientée flux de données. Le programme demande l'élément suivant lorsqu'il est prêt, tout comme un curseur / itérateur. Vous pouvez également créer des documents avec. Lire le document:
Rédiger le document:
JAXB: la dernière implémentation pour lire des documents XML: fait partie de Java 6 dans la v2. Cela nous permet de sérialiser des objets java à partir d'un document. Vous lisez le document avec une classe qui implémente une interface vers javax.xml.bind.Unmarshaller (vous obtenez une classe pour cela à partir de JAXBContext.newInstance). Le contexte doit être initialisé avec les classes utilisées, mais il vous suffit de spécifier les classes racines et de ne pas vous soucier des classes référencées statiques. Vous utilisez des annotations pour spécifier quelles classes doivent être des éléments (@XmlRootElement) et quels champs sont des éléments (@XmlElement) ou des attributs (@XmlAttribute, quelle surprise!)
Rédiger le document:
Exemples copiés sans vergogne à partir de vieilles diapositives de cours ;-)
Edit: A propos de "quelle API dois-je utiliser?". Eh bien, cela dépend - toutes les API n'ont pas les mêmes capacités que vous voyez, mais si vous avez le contrôle sur les classes que vous utilisez pour mapper le document XML, JAXB est ma solution préférée, vraiment élégante et simple (même si je ne l'ai pas utilisée pour documents très volumineux, cela pourrait devenir un peu complexe). SAX est également assez facile à utiliser et restez à l'écart de DOM si vous n'avez pas vraiment de bonne raison de l'utiliser - une API ancienne et maladroite à mon avis. Je ne pense pas qu'il existe des bibliothèques tierces modernes qui présentent quelque chose de particulièrement utile qui manque à la STL et les bibliothèques standard ont les avantages habituels d'être extrêmement bien testées, documentées et stables.
la source
Java prend en charge deux méthodes d'analyse XML hors de la boîte.
SAXParser
Vous pouvez utiliser cet analyseur si vous souhaitez analyser de gros fichiers XML et / ou si vous ne voulez pas utiliser beaucoup de mémoire.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html
Exemple: http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
DOMParser
Vous pouvez utiliser cet analyseur si vous avez besoin de faire des requêtes XPath ou d'avoir le DOM complet disponible.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/DocumentBuilderFactory.html
Exemple: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
la source
Si vous voulez une API de type DOM - c'est-à-dire une API où l'analyseur XML transforme le document en une arborescence de nœuds d'élément et d'attribut - alors vous avez le choix entre au moins quatre: DOM lui-même, JDOM, DOM4J et XOM. La seule raison possible d'utiliser le DOM est qu'il est perçu comme un standard et est fourni dans le JDK: à tous autres égards, les autres sont tous supérieurs. Ma propre préférence, pour sa combinaison de simplicité, de puissance et de performance, est XOM.
Et bien sûr, il existe d'autres styles de traitement: des interfaces d'analyseur de bas niveau (SAX et StAX), des interfaces de liaison d'objet de données (JAXB) et des langages déclaratifs de haut niveau (XSLT, XQuery, XPath). Ce qui vous convient le mieux dépend des exigences de votre projet et de vos goûts personnels.
la source
Le point de Nikita est excellent: ne confondez pas maturité avec mauvais. XML n'a pas beaucoup changé.
JDOM serait une autre alternative à DOM4J.
la source
Vous n'avez pas besoin d'une bibliothèque externe pour analyser XML en Java. Java est livré avec des implémentations intégrées pour SAX et DOM depuis des lustres.
la source
Pour les personnes intéressées par l'utilisation de JDOM, mais craignant que cela n'ait pas été mis à jour depuis un certain temps (en particulier ne tirant pas parti des génériques Java), il existe un fork appelé CoffeeDOM qui aborde exactement ces aspects et modernise l'API JDOM, en savoir plus ici:
http://cdmckay.org/blog/2011/05/20/introducing-coffeedom-a-jdom-fork-for-java-5/
et téléchargez-le depuis la page du projet à l'adresse:
https://github.com/cdmckay/coffeedom
la source
VTD-XML est la bibliothèque d'analyse XML robuste ... elle est meilleure que d'autres dans pratiquement tous les sens ... voici un article de 2013 qui analyse tous les frameworks de traitement XML disponibles sur la plate-forme java ...
http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf
la source