[JAVA-XML] perdu dans les API

Allez, en route pour un nouveau projet JAVA utilisant XML et du coup un petit coup d’oeil sur les
différentes API XML qui pourraient me simplifier la vie. Et là : Horreur :smiley: je suis perdu dans un ensemble de librairies :

  • W3C DOM
  • JDOm
  • DOM4j
  • XOM

idem avec les parseurs :
Xerces, Xalaen, jaxen, crimson, saxpath, plus un tas d’autre noms avec un X (quelle originalité…! B) ).

Certaines librairies sont censées integrer le parseur mais il faut quand même l’ajouter à la mano. Toutes se vantent d’être compatible avec tout et n’importe quoi… et finalement c’est pas le cas.

je vois pas vaguement les différences entre elles. Je fais un appel aux cafzoniens qui ont de l’expérience sur le sujet et qui pourront me guider à choisir la bonne API…

→ Quel(s) APIs utilisez vous ?
→ Quel(s) API conseillez vous ?

Ca depend ce que tu veux faire c’est la reponse B)

Je suis d’accord avec Serge glop.
Si tu veux parser une instance XML, je conseille JDom (qui se base sur xalan) qui est quand meme bien pratique. Après, bin oui, tout depend de ce que tu veux faire. Mais c’est vrai que les librairie à disposition sont soit très mal documentées (des mec qui bossent chez IBM et qui font des javadoc sans commentaires moi je trouve ca fort!), soit juste très mal foutues, mais toujours aussi mal documentées.
Avec eXist c’est la meme merde. Tu veux faire un XUpdate, tu regardes les tutos fournis sur leur site et là, tu vois en commentaire : “Alors, cette facon de procéder ne semble pas marcher, faudrait plutot essayer de faire comme ca (s’en suit une belle instance XUpdate) mais on a jamais essyé alors on sait pas trop”… Moi j’dis XML ca part peut etre d’un bon sentiment mais quelle merde à utiliser!

En XML, on sépare généralement les parseurs en 2 catégories (2 API différentes):

DOM: Travaille de manière récursive, il faut donc attendre que tout le document soit chargé pour attaquer le parsing et l’on doit attendre que tout le document ait été parsé pour récuperer le résultat.
DOM est à utiliser si l’on s’interresse à toutes les informations d’un document XML.

et

SAX: Qui travaille de manière itérative. L’approche est très différente car dans ce cas, on écrit des méthodes pour gerer chacun des évènements rencontrés par le parseur. On prévoit l’action que l’on souhaite faire, pour chacune des entités que l’on rencontre.
SAX s’utilise donc plus si l’on est interressé que par une portion de l’information du document XML.

Il peut être interressant de lire:
http://www.w3.org/DOM/faq.html#SAXandDOM

Un excellent parser SAX est celui de la fondation Apache: Digester.
Le wiki associé peut aussi être interressant à lire.

Bien entendu, mon post n’est qu’un tres grossier résumé des différences entre chacune des 2 API, après floledino c’est surtout à toi de choisir. J’espère t’avoir donné un début de piste pour orienter tes recherches.

L’utilisation est somme toute classique :

  • chargement en mémoire (DOM exclusivement)
  • des petits parsages, le plus simple possible (XPath ou encore mieux XQuery comme dans eXist)
  • des mises à jours
  • voir quelques trnasformations via XSLT.
  • modifs (pourquoi pas avec XUpdate)
  • Eventuellement de la validation à partir d’un Schéma XML

Bref du grand classique …
J’ai jeté un oeil sur DOM4J(et Jaxen) qui me semble la plus aboutie pour l’instant, même si elle prend pas en compte le XQuery ni Xupdate…Elle a l’air simple d’utilisation aussi… B)

Pour les updates, je te conseillerais d’utiliser XQuery plutot que XUpdate. C’est quand même hachement plus simple.
tiens un exemple :

for $i in doc("monDocXML")//maRacine retrun update insert <monElement>saValeur...(tout ce que tu veux mettre)</monElement> following $i

ca te permet d’ajouter une nouvelle entrée a la fin de ton document xml. Tu peux aussi faire des modifs si tu veux pas faire d’ajout mais j’ai pas la fonction en tête. En cherchant sur le net y a moyen de retrouver les fonctions XQuery permettant de le faire.

J’utilise JDOM.
Bon, après c’est aussi une question de goût et je vais pas rentré dans les details, DexterWard a bien resumé les choses.

Et c’est vrai que c’est la merde question documentation.

[quote=« DexterWard, post:6, topic: 29925 »]Pour les updates, je te conseillerais d’utiliser XQuery plutot que XUpdate. C’est quand même hachement plus simple.
tiens un exemple :

for $i in doc("monDocXML")//maRacine retrun update insert <monElement>saValeur...(tout ce que tu veux mettre)</monElement> following $i

ca te permet d’ajouter une nouvelle entrée a la fin de ton document xml. Tu peux aussi faire des modifs si tu veux pas faire d’ajout mais j’ai pas la fonction en tête. En cherchant sur le net y a moyen de retrouver les fonctions XQuery permettant de le faire.[/quote]

Yep, je suis d’acc’, j’avais utilisé Xquery avec eXist et ça c’était avéré bien puissant. :stuck_out_tongue:
Après, je me galère à voir si XQuery est utilisable avec JDOM et/ou DOM4J. De manière évidente, c’est pas géré en natif, des moteurs XQuery existent (Qixz, Qexo, XQJ) mais est-il possible de les utiliser avec DOM4J ou JDOM ? :smiley:

Concrêtement :

  • Avec quelles librairies utilises-tu XQuery ?? (hormis les librairies d’eXist)
  • Comment tu fais ? (un petit exemple ?)
  • Est ce que je me prends pas trop la tête à vouloir trouver THE librarie alors que pour faire 3 pauvres ajouts dans un doc XML, j’ai pas besoin de me prendre autant la tête ? (mais ca serait quand même hachement mieux XQuery) B)

Hmm, personne n’a évoqué cette solution, donc je me sens un peu obligé d’en parler: il existe un paquet de frameworks qui permettent de binder un schéma xsd sur une hiérarchie de classes Java; l’outil te génére tes classes, et tu n’as plus qu’à manipuler de bons vieux pojos au lieu de naviguer dans ton doc XML (et ça marche dans les 2 sens bien sûr: parser un document existant, éventuellement pour le modifier, ou créer un document à partir de rien). Autant dire que niveau simplicité, c’est difficile de faire mieux…

Les 2 principaux frameworks de ce type sont Castor et xmlBeans. J’ai utilisé les 2, honnêtement j’ai pas vu beaucoup de différences (c’est vrai aussi que mon utilisation était assez limitée). Petit avantage peut-être pour xmlbeans, projet de la fondation Apache et développé à l’origine par BEA (autant dire que c’est du solide). Voir ici pour un petit comparatif.

A noter que xmlBeans supporte les requêtes xquery et xpath et offre aussi un mécanisme de curseurs assez pratique (une fois qu’on a pigé le principe B) ).

petit Up…
Je cherche un framework XML bcp plus simple je pense :
le but est pas de marshalliser un objet, de le serialiser, mais de faire des appels de fonctions java scripts.
Je m’explique.
J’ai un projet sur tomcat, qui s’appuie sur un client lourd javascript qui s’occupe de gerer tout l’affichage, et le coté serveur s’occupe completement du coté contenu.
Le client se contente de lire les reponses XMLs du serveur qui contiennent des ordres et des parametres, comme par exemple, 'dans la box ‘workspace’ que tu as créé, tu rajoute ca comme contenu.'
et je voudrais utiliser une bibli capable de créer les requetes (en gros, une bibli capable de me pondre un bout d’xml, et du coté client, une bibli (javascript?) capable de la décoder.
ca existe?

@floledino -> Le problème c’est justement que je passe par eXist… Mais il dois y avoir moyen de faire des requetes xQuery directement sur un fichier xml sans passer par un serveur de bdd. Enfin, je pense…

@Berzehk -> J’ai pas bien compris ce que tu cherches, mais si tu utilises JDom tu pourras interroger tes instances xml sans problèmes. JDom permet de créer un arbre reprensantant ton fichier xml. C’est même super simple comme truc, faut juste chercher des exmples sur le net. Promis quand j’ai le temps je met a jour mon super blog et je vous file le lien.

arf =) je regarderais, promis. En attendant j’vais ptet me fier aux frameworks JSON qui ont l’air parfaits pour ce que je veux faire =)