Comment puis-je convertir XML en un objet de valeur java?
-
13-09-2019 - |
Question
Quel genre de bibliothèques open-source sont disponibles pour convertir XML en un objet de valeur java?
Dans .Net, il y a une façon de le faire facilement avec cette sérialisation XML et attributs. J'imagine-il un parallèle en Java. Je sais comment faire cela avec un analyseur DOM ou SAX, mais je me demandais s'il y avait un moyen plus facile.
J'ai un format XML prédéfini qui ressemble à quelque chose comme ça.
<FOOBAR_DATA>
<ID>12345</ID>
<MESSAGE>Hello World!</MESSAGE>
<DATE>22/04/2009</DATE>
<NAME>Fred</NAME>
</FOOBAR_DATA>
Dans .Net, je peux faire quelque chose comme cela pour lier mon objet aux données.
using System;
using System.Xml.Serialization;
namespace FooBarData.Serialization
{
[XmlRoot("FOOBAR_DATA")]
public class FooBarData
{
private int _ID = 0;
[XmlElement("ID")]
public int ID
{
get { return this._ID; }
set { this._ID = value; }
}
private string _Message = "";
[XmlElement("MESSAGE")]
public string Message
{
get { return this._Message; }
set { this._Message = value; }
}
private string _Name = "";
[XmlElement("NAME")]
public string Name
{
get { return this._Name; }
set { this._Name = value; }
}
private Date _Date;
[XmlElement("DATE")]
public Date Date
{
get { return this._Date; }
set { this._Date= value; }
}
public FooBarData()
{
}
}
}
Je me demandais s'il y avait une méthode utilisant des annotations, similaires à .Net ou peut-être Hibernate, qui me permettra de lier mon objet de valeur au-XML prédéfini.
La solution
J'aime XStream beaucoup, en particulier par rapport à JAXB - contrairement JAXB, XStream n'a pas besoin de vous ont un XSD. Il est génial si vous avez une poignée de classes à sérialiser et désérialiser XML, sans lourde-ness d'avoir besoin de créer un XSD, exécutez jaxc pour générer des classes à partir de ce schéma, etc. XStream d'autre part est assez léger.
(Bien sûr, il y a beaucoup de fois où JAXB est approprié, par exemple lorsque vous avez un XSD préexistant qui correspond à l'occasion ...)
Autres conseils
JAXB vous permet de convertir un schéma XML (XSD) fichier dans une collection de classes Java. Cela peut être plus « structuré » que l'approche XMLEncoder
/ Serializable
cette réponse Andy (excellent, par la voie) fournit.
Java a XMLEncoder que vous pourriez être en mesure d'utiliser pour sérialiser un objet au format XML. La seule exigence est que votre objet implémente « Serializable. »
Voici un exemple: