Tout d'abord, définissez deux exemples de classes classa et classb pour des exemples de démonstrations ultérieures
La copie de code est la suivante:
package cn.lzrabbit;
classe publique classa {
private int classaid;
String privé Classaname;
ClassB privéB ClassB;
public int getClassaid () {
return classAid;
}
public void setClassaid (int classaid) {
this.classaid = classAid;
}
public String getClassaname () {
retourner classaname;
}
public void setClassaname (String classaname) {
this.classaname = classaname;
}
classe publiqueb getClassb () {
return classb;
}
public void setClassB (classb classb) {
this.classB = classb;
}
}
Classa
La copie de code est la suivante:
package cn.lzrabbit;
classe publique classbb {
private int classbid;
String privé classbname;
public int getClassbid () {
return classbid;
}
public void setClassbid (int classbid) {
this.classbid = classbid;
}
String public getClassBname () {
return classbname;
}
public void setClassBname (String classbname) {
this.classbname = classbName;
}
}
ClasseB
Xmlutil pour la sérialisation
La copie de code est la suivante:
package cn.lzrabbit;
import java.io.stringReader;
import java.io.stringwriter;
import javax.xml.bind. *;
classe publique xmlutil {
String statique public toxml (objet obj) {
essayer {
JaxbContext context = jaxbcontext.newinstance (obj.getClass ());
Marshaller Marshaller = context.CreateMarshaller ();
Marshaller.SetProperty (Marshaller.jaxb_encoding, "UTF-8"); // // Format de codage
marshaller.setproperty (marshaller.jaxb_formatted_output, true); // s'il faut formater la chaîne XML générée
Marshaller.SetProperty (marshaller.jaxb_fragment, false); // omets omettre les informations de déclaration d'en-tête XM
StringWriter writer = new StringWriter ();
Marshaller.Marshal (OBJ, écrivain);
return writer.toString ();
} catch (exception e) {
Jetez une nouvelle RuntimeException (E);
}
}
@SuppressWarnings ("non contrôlé")
public static <t> t FromXml (String xml, class <T> valetype) {
essayer {
JaxbContext context = jaxbContext.newInstance (valetype);
Unmarshaller unmarshaller = context.CreateunMarshaller ();
return (t) unmarshaller.unmarshal (new StringReader (xml));
} catch (exception e) {
lancer un nouveau RuntimeException (e.getMessage ());
}
}
}
Xmlutil
L'appel est le suivant:
La copie de code est la suivante:
package cn.lzrabbit;
classe publique Mainrun {
/ **
* @param args
* /
public static void main (String [] args) {
Classb classb = new classb ();
classb.setClassbid (22);
classb.setClassBname ("b2");
Classa classa = new classa ();
classa.setClassaid (11);
classa.setClassaname ("a1");
classa.setClassB (classb);
System.out.println (xmlutil.toxml (classa));
}
}
Mainrun
Le résultat de sortie est le suivant:
La copie de code est la suivante:
<? xml version = "1.0" Encoding = "utf-8" standalone = "Oui"?>
<lassa>
<ClassAid> 11 </classaid>
<frassaname> a1 </scassaname>
<lasseb>
<ClassBid> 22 </classbid>
<Classbname> B2 </ classbname>
</classb>
</cassa>
Voici quelques points à noter
1. Ajoutez l'annotation @xmlrootelement à la classe sérialisée, sinon une erreur sera signalée (l'invite d'erreur est très claire, donc je ne le publierai pas ici)
2JAXB sérialise les getters et les setters par défaut lors de la sérialisation XML, et les getters et les setters doivent apparaître par paires avant d'être sérialisés.
3 noms d'attribut. Ce à quoi vous devez prêter attention ici, c'est que @xmlelement peut être placé sur Getter ou Setter, mais un seul peut être placé, ce qui signifie que l'annotation @xmlelement ne peut pas être utilisée sur Getter et Setter en même temps
4CHE pour contrôler le nom du nœud racine?
Utilisez @xmlrootelement pour spécifier l'attribut de nom, tel que @xmlrootelement (name = "classa")
5 Comment ajouter un espace de noms pour spécifier l'attribut d'espace de noms à l'aide de @xmlrootelement (namespace = "cn.lzrabbit")
6 Comment contrôler avec précision chaque nom d'attribut
La conversion automatique de JaxB en première lettre provoquera des noms d'attribut imprévisibles.
7 Comment implémenter la sérialisation à l'aide de champs de champ au lieu de setters et de getters
Ajoutez l'annotation @xmlaccessortype (xmlaccessType.field) sur la classe que vous souhaitez utiliser et spécifiez comme xmlaccessType.field. .
Ce qui suit est un exemple de code utilisant l'annotation ci-dessus
La copie de code est la suivante:
@Xmlrootelement (namespace = "cn.lzrabbit")
@XmlaccessorType (xmlaccessType.field)
classe publique classa {
private int classaid;
@Xmlelement (name = "classaname")
String privé Classaname;
ClassB privéB ClassB;
public int getClassaid () {
return classAid;
}
public void setClassaid (int classaid) {
this.classaid = classAid;
}
public String getClassaname () {
retourner classaname;
}
public void setClassaname (String classaname) {
this.classaname = classaname;
}
classe publiqueb getClassb () {
return classb;
}
public void setClassB (classb classb) {
this.classB = classb;
}
}
@Xmlrootelement
@XmlaccessorType (xmlaccessType.field)
classe publique classbb {
private int classbid;
String privé classbname;
public int getClassbid () {
return classbid;
}
public void setClassbid (int classbid) {
this.classbid = classbid;
}
String public getClassBname () {
return classbname;
}
public void setClassBname (String classbname) {
this.classbname = classbName;
}
}
Le XML de sortie est
La copie de code est la suivante:
<? xml version = "1.0" Encoding = "utf-8" standalone = "Oui"?>
<ns2: classa xmlns: ns2 = "cn.lzrabbit">
<ClassAid> 11 </classaid>
<frassaname> a1 </scassaname>
<lasseb>
<ClassBid> 22 </classbid>
<Classbname> B2 </ classbname>
</classb>
</ ns2: classa>
PS: Voici quelques outils en ligne pour votre référence:
Outil de conversion mutuelle XML / JSON en ligne:
http://tools.vevb.com/code/xmljson
Format XML en ligne / Compress XML en ligne:
http://tools.vevb.com/code/xmlformat
Outils de compression / formatage en ligne XML:
http://tools.vevb.com/code/xml_format_compress