J'ai besoin de lire des fichiers XML de petite taille (quelques Mo au maximum, encodés en UTF-8), fouiller autour de divers éléments et attributs, peut-être en modifier quelques-uns et réécrire le XML sur le disque (de préférence avec un formatage agréable et en retrait) .
Quel serait le meilleur analyseur XML pour mes besoins? Il y a beaucoup de choix. Certains que je connais sont:
Et bien sûr celui du JDK (j'utilise Java 6). Je connais Xerces mais le trouve maladroit.
Des recommandations?
Réponses:
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.
la source
Je pense que vous ne devriez pas envisager d'implémentation spécifique de l'analyseur. L'API Java pour le traitement XML vous permet d'utiliser n'importe quelle implémentation d'analyseur conforme d'une manière standard. Le code devrait être beaucoup plus portable, et lorsque vous réalisez qu'un analyseur spécifique est devenu trop ancien, 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:
Oubliez les API propriétaires telles que JDOM ou Apache (c'est-à-dire Apache Xerces XMLSerializer ) car elles vous lieront à une implémentation spécifique qui peut évoluer dans le temps ou perdre la compatibilité ascendante, ce qui vous fera changer votre code à l'avenir lorsque vous voudrez mettre à niveau vers une nouvelle version de JDOM ou tout autre analyseur que vous utilisez. Si vous vous en tenez à l'API standard Java (en 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 tout vérifié, mais je suis presque sûr) des analyseurs proposés sont conformes à une implémentation JAXP donc techniquement vous pouvez tout utiliser, peu importe lequel.
la source
Voici une belle comparaison sur DOM, SAX, StAX et TrAX (Source: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )
Type d'API Pull, streaming Push, streaming Dans l'arbre de la mémoire Règle XSLT
Facilité d'utilisation Élevé Moyen Élevé Moyen
Capacité XPath Non Non Oui Oui
CPU et mémoire Bon Bon Varie Varie
Transférer uniquement Oui Oui Non Non
Lire XML Oui Oui Oui Oui
Écrire XML Oui Non Oui Oui
CRUD Non Non Oui Non
la source
Le XML simple http://simple.sourceforge.net/ est très facile pour (dé) sérialiser des objets.
la source
En plus de SAX et DOM, il existe une analyse STaX disponible à l'aide de XMLStreamReader qui est un analyseur d'extraction xml.
la source
J'ai trouvé que dom4j était l'outil pour travailler avec XML. Surtout par rapport à Xerces.
la source
Je ne recommanderais pas cela, car vous avez beaucoup de "réflexion" dans votre application, mais l'utilisation de XSLT pourrait être meilleure (et potentiellement plus rapide avec la compilation XSLT en bytecode) que la manipulation Java.
la source
Si vous vous souciez moins des performances, je suis un grand fan d'Apache Digester, car il vous permet essentiellement de mapper directement de XML à Java Beans.
Sinon, vous devez d'abord analyser, puis construire vos objets.
la source