Je dois lire des fichiers XML de petite taille (quelques Mo au plus, codés en UTF-8), fouiller dans divers éléments et attributs, peut-être en modifier quelques-uns et réécrire le code XML sur disque (de préférence avec Nice, le formatage en retrait). .
Quel serait le meilleur analyseur XML pour mes besoins? Il y a beaucoup de choix. Certains dont je suis conscient sont:
Et bien sûr celui du JDK (j'utilise Java 6). Je connais Xerces mais je le trouve maladroit.
Des recommandations?
Si la vitesse et la mémoire ne posent aucun problème, dom4j est une très bonne option. Si vous avez besoin de rapidité, utilisez un analyseur StAX tel que Woodstox, mais vous devez écrire plus de code pour faire avancer les choses et vous habituer à traiter le XML en flux.
Je pense que vous ne devriez pas envisager d’implémentation d’analyseur spécifique. API Java pour le traitement XML vous permet d'utiliser n'importe quelle implémentation d'analyseur conforme de manière standard. Le code devrait être beaucoup plus portable, et quand vous réaliserez 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).
Il existe fondamentalement trois manières de gérer XML de manière standard:
Oubliez les API propriétaires telles que celles 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é avec les versions antérieures, ce qui vous obligera à modifier votre code dans les versions antérieures. lorsque vous souhaitez effectuer une mise à niveau vers une nouvelle version de JDOM ou l’analyseur que vous utilisez. Si vous vous en tenez à Java API standard (à l'aide d'usines et d'interfaces), votre code sera beaucoup plus modulaire et facile à gérer.
Inutile de dire que tous les analyseurs proposés (je ne les ai pas tous vérifiés, mais j'en suis presque sûr) sont conformes à la mise en oeuvre de JAXP, de sorte que techniquement, vous pouvez tous les utiliser, peu importe lequel.
Voici une comparaison intéressante entre DOM, SAX, StAX et TrAX (Source: http://download.Oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2. html )
Caractéristique StAX SAX DOM TrAX
Type d'API Pull, streaming Push, streaming Dans l'arborescence mémoire Règle XSLT
Facilité d'utilisation Elevé Moyen Elevé Moyen
Capacité XPath Non Non Oui Oui
CPU & Mémoire Bon Bon Varie Varie
Transmettre uniquement Oui Oui Non Non
Lire XML Oui Oui Oui Oui
Écrire en XML Oui Non Oui Oui
CRUD Non Non Oui Non
Simple XML http://simple.sourceforge.net/ est très facile à utiliser pour (dé) sérialiser des objets.
Outre SAX et DOM, l'analyse STaX est disponible à l'aide de XMLStreamReader, un analyseur syntaxique d'extraction XML.
J'ai trouvé dom4j comme étant l'outil pour travailler avec XML. Surtout comparé à Xerces.
Je ne recommanderais pas cela car vous avez beaucoup de "réflexions" dans votre application, mais utiliser XSLT pourrait être mieux (et potentiellement plus rapide avec la compilation XSLT vers bytecode) que la manipulation Java.
Si les performances vous intéressent moins, je suis un grand fan d’Apache Digester, car il vous permet essentiellement de mapper directement du XML vers Beans Java.
Sinon, vous devez d'abord analyser, puis construire vos objets.