Meilleur analyseur XML pour Java [fermé]


J'ai besoin de lire des fichiers XML de petite taille (quelques Mo au maximum, encodés en UTF-8), de fouiller en regardant divers éléments et attributs, peut-être d'en modifier quelques-uns et d'écrire à nouveau le XML sur le disque (de préférence avec une belle mise en forme en retrait).

Quel serait le meilleur analyseur XML pour mes besoins? Il y a beaucoup de choses à choisir. Certains, je suis au courant de sont:

Et bien sûr celui du JDK (j'utilise Java 6). Je connais Xerces mais je le trouve maladroit.

Recommandations?

Author: Elliot Chance, 2008-12-17

8 answers

Si la vitesse et la mémoire ne posent aucun problème, dom4j est une très bonne option. Si vous avez besoin de vitesse, utiliser un analyseur StAX comme Woodstox est la bonne façon, mais vous devez écrire plus de code pour faire avancer les choses et vous devez vous habituer à traiter XML dans les flux.

 78
Author: zehrer, 2013-12-24 08:57:33

Je pense que vous ne devriez pas considérer une implémentation d'analyseur spécifique. API Java pour le traitement XML vous permet d'utiliser toute implémentation d'analyseur conforme de manière standard. Le code devrait être beaucoup plus portable, et lorsque vous réalisez qu'un analyseur spécifique est devenu trop vieux, vous pouvez le remplacer par un autre sans changer une ligne de votre code (si vous le faites correctement).

Fondamentalement, il existe trois façons de gérer XML de manière standard:

  • SAX C'est le plus simple API. Vous lisez le XML en définissant une classe de gestionnaire qui reçoit les données à l'intérieur des éléments/attributs lorsque le XML est traité de manière série. C'est plus rapide et plus simple si vous prévoyez seulement de lire certains attributs/éléments et/ou d'écrire certaines valeurs (votre cas).
  • DOM Cette méthode crée une arborescence d'objets qui vous permet de la modifier/d'y accéder de manière aléatoire afin qu'elle soit meilleure pour la manipulation et la manipulation XML complexes.
  • StAX C'est au milieu de la chemin entre SAX et DOM. Vous écrivez simplement du code pour extraire les données de l'analyseur qui vous intéresse lorsqu'elles sont traitées.

Oubliez les API propriétaires telles que JDOM ou Apache (c'est-à-direApache Xerces XMLSerializer ) car cela vous liera à une implémentation spécifique qui peut évoluer dans le temps ou perdre la rétrocompatibilité, ce qui vous obligera à changer votre code à l'avenir lorsque vous souhaitez passer à une nouvelle version de JDOM ou Si vous vous en tenez à API standard Java (utilisant des usines et des interfaces) votre code sera beaucoup plus modulaire et maintenable.

Il n'est pas nécessaire de dire que tous (je n'ai pas vérifié tous, mais j'en suis presque sûr) des analyseurs proposés sont conformes à une implémentation JAXP, donc techniquement vous pouvez tout utiliser, peu importe lequel.

 246
Author: Fernando Miguélez, 2014-04-21 09:21:24

Voici une belle comparaison sur DOM, SAX, StAX & TrAX (Source: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html)

Il s'agit de la première version de la série.]}

Type d'API Pull, streaming Push, streaming Dans l'arbre de mémoire XSLT Rule

La Facilité d'Utilisation Haut                    Moyen Élevé Moyen

Capacité XPath Non Non Oui Oui

CPU & Mémoire Bon Bon Varie Varie

En avant seulement Oui Oui Non Non

Lire XML Oui                    Oui Oui Oui

Écrire XML Oui Non Oui Oui

CRUD non Non Oui Non

 127
Author: Kadir, 2011-04-14 15:35:04

XML simple http://simple.sourceforge.net / est très facile pour (dé)sérialiser des objets.

 8
Author: asdf, 2011-07-23 19:07:32

En plus de SAX et DOM, l'analyse STaX est disponible à l'aide de XMLStreamReader qui est un analyseur xml pull.

 4
Author: , 2008-12-18 01:32:15

J'ai trouvé que dom4j était l'outil pour travailler avec XML. Surtout par rapport à Xerces.

 3
Author: Brian Matthews, 2013-12-24 09:04:57

Je ne recommanderais pas que vous ayez beaucoup de "réflexion" dans votre application, mais l'utilisation de XSLT pourrait être meilleure (et potentiellement plus rapide avec la compilation XSLT-to-bytecode) que la manipulation Java.

 2
Author: , 2008-12-18 01:42:47

Si vous vous souciez moins des performances, je suis un grand fan d'Apache Digesteur, car il vous permet essentiellement de mapper directement du XML aux Beans Java.

Sinon, vous devez d'abord analyser, puis construire vos objets.

 1
Author: Uri, 2008-12-18 01:33:36