Quelle est la meilleure façon de convertir XML en objets Java?
Je ne veux pas une représentation similaire pour similaire, mais j'aimerais extraire certaines données du XML et remplir un objet Java. J'ai jeté un œil à XStream, mais je n'ai pas vraiment aimé tout le genre de choses "déplacer vers le bas, monter". Je préférerais un objet de type DOM lors de l'écriture de convertisseurs ...
Je sais que tout le monde aime les solutions automatiques comme JAXB et autres, mais je recommanderais le codage manuel javax.xml.bind.Marshaller
et javax.xml.bind.Unmarshaller
implémentations pour obtenir exactement ce que vous voulez sans remplir votre espace perm gen inutilement. Utilisez JDOM pour analyser XML et mapper les valeurs en objets Java utilisant XPath. Ce sera un peu de travail de le faire une fois, mais vous aurez exactement ce dont vous avez besoin et rien de plus.
Si vous avez un schéma XML, [~ # ~] jaxb [~ # ~] est Nice - fait partie du JDK. Générez des classes Java en exécutant par exemple xjc -p foo myschema.xsd
Pour lire un fichier XML et récupérer un objet (à partir des classes générées par l'outil xjc):
JAXBContext context = JAXBContext.newInstance(FooObj.class);
Unmarshaller unMarshaller = context.createUnmarshaller();
FooObj param = (FooObj) unMarshaller.unmarshal(new FileInputStream("Foo.xml"));
Vous pouvez faire des choses similaires si vous ne voulez que des parties d'un document XML converties en un objet, vous devriez par exemple pouvoir donner à JAXB une partie d'un document DOM, au lieu d'un fichier entier comme ci-dessus.
Découvrez le Apache Digester
JAXB est le meilleur moyen de convertir des objets en XML et MOXy est la meilleure implémentation JAXB.
MOXy propose les extensions suivantes:
Vous pouvez utiliser Castor pour une conversion pratique de XML en Java et inversement).
Avec Castor, vous pouvez
Je ne sais pas exactement si c'est ce que vous recherchez, mais vous pouvez utiliser quelque chose comme XMLBeans pour lier XML à Java objets. J'ai dû l'utiliser chez un ancien employeur. Malheureusement, c'était un système existant et je n'avais qu'à manipuler les objets et je n'avais pas à produire la bibliothèque qui les contient. De plus, je ne sais pas dans quelle mesure cela fonctionnera sans un XSD (vous n'a pas mentionné si vous en aviez un ou non).