384 votes

Meilleur analyseur XML pour Java

J'ai besoin de lire petite (quelques MO tout au plus, codé en UTF-8) de fichiers XML, de fouiller à la recherche à divers éléments et d'attributs, peut-être modifier un peu et d'écrire le code XML de retour à nouveau sur le disque (de préférence avec de de nice, en retrait de formatage).

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

Et bien sûr, l'un dans le JDK (j'utilise la version 6 de Java). Je suis familier avec Xerces mais il trouve maladroit.

Recommandations?

253voto

Fernando Miguélez Points 7532

Je pense que vous ne devriez pas envisager de tout analyseur spécifique à la mise en œuvre. Java API for XML Processing permet d'utiliser tout conforme analyseur de la mise en œuvre d'une manière standard. Le code devrait être beaucoup plus portable, et quand on sait qu'un analyseur spécifique a grandi trop vieux, vous pouvez le remplacer par un autre sans changer une ligne de code (si vous le faites correctement).

Fondamentalement, il existe trois façons de traiter le XML dans un façon standard:

  • SAX C'est le plus simple API. Vous lire le fichier XML par la définition d'une classe de Gestionnaire qui reçoit les données à l'intérieur des éléments/attributs lorsque le fichier XML est traitée dans une série. Il est plus rapide et la plus simple si vous prévoyez de lire certains attributs/éléments et/ou écrire des valeurs de retour (votre cas).
  • DOM Cette méthode crée un objet de l'arbre qui vous permet de modifier/accès au hasard, de sorte qu'il est mieux pour XML complexes de manipulation et de manutention.
  • StAX C'est au milieu du chemin entre SAX et DOM. Il vous suffit d'écrire le code pour extraire les données de l'analyseur vous êtes intéressé au moment où elle est traitée.

Oubliez les propriétaires des Api comme JDOM ou Apache (c'est à dire à Apache Xerces XMLSerializer) parce qu'elle vous lier à une mise en œuvre spécifique qui peut évoluer dans le temps ou de perdre la compatibilité descendante, qui vous permettra de modifier votre code dans l'avenir, lorsque vous souhaitez mettre à niveau vers une nouvelle version de JDOM ou quel que soit l'analyseur vous utilisez. Si vous vous en tenez à Java API standard (à l'aide des usines et des interfaces), votre code sera beaucoup plus modulaire et facile à entretenir.

Il n'est pas besoin de dire que tous (je n'ai pas vérifié, mais je suis presque sûr) des analyseurs proposés sont conformes à un JAXP mise en œuvre donc, techniquement, vous pouvez utiliser tous, peu importe laquelle.

130voto

Kadir Points 1006

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

Fonction StAX SAX, DOM TrAX

API de Type Pull,streaming Push,la diffusion en continu Dans la mémoire de l'arbre Règle XSLT

La facilité d'Utilisation Élevée Moyenne Élevée Moyenne

XPath Capacité Non Non Oui Oui

CPU & Mémoire bonne Bonne varie Varie

En Avant Oui Oui Non Non

Lire XML Oui Oui Oui Oui

Écrire du XML Oui Non Oui Oui

CRUD non Non Oui Non

80voto

zehrer Points 887

Si la vitesse et la mémoire n’est pas un problème, dom4j est une très bonne option. Si vous avez besoin de vitesse, à l’aide d’un analyseur de StAX comme Woodstox est la bonne façon, mais vous devez écrire du code plus pour faire avancer les choses et il faut s’habituer au processus XML dans les ruisseaux.

8voto

asdf Points 71

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X