Je suis sûr que cela aurait été longuement discuté ou répondu avant, mais je besoin d'un peu plus d'informations sur la meilleure approche pour ma situation ...Comment désérialiser des objets Java à partir de XML?
Problème:
Nous avons quelques grandes quantités de données XML (de 100k à 5Mo) que nous devons gonfler en objets Java. Le problème est que les données ne sont pas très bien mappées sur un objet, donc nous avons seulement besoin de sortir certaines parties des données et de créer les objets. Compte tenu de cela, des solutions telles que JAXB ou XStream ne sont vraiment pas appropriées. Nous avons donc besoin d'extraire les données XML et de les placer dans des objets java aussi efficacement que possible.
Solutions possibles:
La façon dont je le vois, nous avons 3 solutions possibles:
- SAX analyse syntaxique
- analyse syntaxique DOM
- XSLT
Nous pouvons charger le XML dans n'importe quelle implémentation JAXP et tirer les données en utilisant l'une des méthodes ci-dessus.
Question (s)
J'ai quelques questions/préoccupations:
- Comment fonctionne XSLT sous le capot? Est-ce juste un analyseur DOM? Je demande parce que XSLT semble être un bon moyen d'aller, mais je ne veux pas vraiment le considérer si cela ne nous donnera pas de meilleures performances que DOM.
- Quelles sont les bibliothèques les plus répandues qui fournissent des parseurs XML DOM, XSLT et SAX?
- Selon votre expérience, quelles sont les raisons pour choisir DOM, SAX ou XSLT? Est-ce que la facilité d'utilisation de DOM ou XSLT domine totalement les améliorations de performance offertes par SAX?
- Des repères là-bas? Ceux que j'ai trouvés sont vieux (comme dans, 8 ans). Donc, certains benchmarks récents seraient appréciés.
- Existe-t-il d'autres solutions que celles décrites ci-dessus que je pourrais manquer?
Edit:
Quelques précisions ... Vous pouvez utiliser XSLT pour injecter directement des valeurs dans un objet Java ... il est normalement utilisé pour transformer XML en un autre XML, mais je Je parle du point de vue d'appeler une méthode de XSLT en Java pour injecter la valeur. Je ne suis toujours pas clair sur la façon dont un processeur XSLT fonctionne exactement ... Comment est-il nourrir le code XML dans le code XSLT que vous écrivez?
est XPath une option? –
Voir ma réponse ci-dessous. Le XPath pour analyser quelques champs est normalement très simple et souvent très rapide. – Fortyrunner
XSLT utilise des arborescences XML, il utilise donc un fournisseur DOM. Mais ici vous devez mesurer la performance (et le temps de développement) entre votre implémentation DOM "simple" et le langage de focus pour les transformations ... XSLT peut également fonctionner avec SAX et le streaming (vérifier le processeur Saxon XSLT). Je pense que vous pouvez commencer la chaîne avec ceci et ensuite utiliser un certain pont afin que le résultat en streaming alimente directement SAX afin de travailler avec une bibliothèque bien connue pour l'objet XML-Java. –