Pertama, tentukan dua contoh kelas Classa dan ClassB untuk demonstrasi contoh berikutnya
Salinan kode adalah sebagai berikut:
paket cn.lzrabbit;
kelas publik classa {
private int classid;
private string classaname;
classb classb pribadi;
public int getClassAid () {
mengembalikan Classid;
}
public void setClassAid (int classiid) {
this.classaid = classid;
}
string publik getClassaname () {
mengembalikan classaname;
}
public void setClassaname (string classaname) {
this.classaname = classaname;
}
public classb getClassB () {
mengembalikan classb;
}
public void setClassB (classb classb) {
this.classb = classb;
}
}
Classa
Salinan kode adalah sebagai berikut:
paket cn.lzrabbit;
kelas publik classb {
private int classbid;
Private String ClassBName;
public int getClasSbid () {
mengembalikan classbid;
}
public void setClassBid (int classbid) {
this.classbid = classbid;
}
string publik getClassBname () {
kembalikan classBname;
}
public void setClassBname (string classbName) {
this.classBname = classBname;
}
}
Classb
Xmlutil untuk serialisasi
Salinan kode adalah sebagai berikut:
paket cn.lzrabbit;
impor java.io.stringreader;
impor java.io.stringwriter;
impor javax.xml.bind.*;
kelas publik xmlutil {
Public Static String ToxML (Object Obj) {
mencoba {
JAXBContext Context = jaxbcontext.newInstance (obj.getClass ());
Marshaller Marshaller = Context.CreateMarShaller ();
Marshaller.setProperty (Marshaller.jaxb_encoding, "UTF-8"); // // Format Pengkodean
Marshaller.setProperty (Marshaller.jaxb_formatted_output, true); // Apakah akan memformat string XML yang dihasilkan
Marshaller.setProperty (Marshaller.jaxb_fragment, false); // Apakah akan menghilangkan informasi deklarasi header XM
Stringwriter writer = New StringWriter ();
Marshaller.marshal (OBJ, penulis);
return writer.tostring ();
} catch (Exception e) {
Lempar RuntimeException baru (E);
}
}
@SuppressWarnings ("Uncecked")
public static <T> t fromxml (string xml, kelas <T> valueType) {
mencoba {
JAXBContext Context = JAXBContext.NewInstance (ValueType);
Unmarshaller unmarshaller = context.createunmarshaller ();
return (t) unmarshaller.unmarshal (stringReader baru (xml));
} catch (Exception e) {
Lempar RuntimeException baru (e.getMessage ());
}
}
}
Xmlutil
Panggilannya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
paket cn.lzrabbit;
kelas publik Mainrun {
/**
* @param args
*/
public static void main (string [] args) {
ClassB classB = classB baru ();
classb.setClassBID (22);
classb.setClassBname ("b2");
Classa classa = classa baru ();
classa.setclassaid (11);
classa.setClassaname ("a1");
classa.setClassb (classb);
System.out.println (xmlutil.toxml (classa));
}
}
Mainrun
Hasil output adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
<? Xml Version = "1.0" encoding = "utf-8" mandiri = "ya"?>
<sclasa>
<slassiid> 11 </classaid>
<slassaname> a1 </smelasame>
<slassb>
<slumbid> 22 </classbid>
<MlassBname> B2 </classbname>
</classb>
</sclasa>
Berikut beberapa poin yang perlu diperhatikan
1. Tambahkan anotasi @xmlrooteLement ke kelas serial, jika tidak kesalahan akan dilaporkan (prompt kesalahan sangat jelas, jadi saya tidak akan mempostingnya di sini)
2JAXB Serializes Getters and Setters Secara default saat serialisasi XML, dan getters dan setter harus muncul berpasangan sebelum serial.
3 nama atribut. Yang perlu Anda perhatikan di sini adalah @xmlelement dapat ditempatkan pada Getter atau Setter, tetapi hanya satu yang dapat ditempatkan, yang berarti bahwa anotasi @xmlelement tidak dapat digunakan pada Getter dan Setter pada saat yang sama
4 Bagaimana cara mengontrol nama simpul root?
Gunakan @xmlRootElement untuk menentukan atribut nama, seperti @xmlrooteLement (name = "classa")
5 Cara menambahkan namespace untuk menentukan atribut namespace menggunakan @xmlrooteLement (namespace = "cn.lzrabbit")
6 Cara mengontrol setiap nama atribut secara akurat
Secara otomatis mengonversi JAXB ke huruf kecil pertama akan menyebabkan nama atribut yang tidak dapat diprediksi muncul.
7 Cara Menerapkan Serialisasi Menggunakan Bidang Bidang, bukan setter dan getters
Tambahkan anotasi @XMLacCessorType (xmlaccessType.field) pada kelas yang ingin Anda gunakan dan menentukannya sebagai xmlaccessType.field. Alih -alih mengatur anotasi @xmlelement (name = "") untuk setiap atribut, tentu saja, Anda juga dapat menggunakan anotasi @xmlelement di lapangan
Berikut ini adalah contoh kode menggunakan anotasi di atas
Salinan kode adalah sebagai berikut:
@XmlrooteLement (namespace = "cn.lzrabbit")
@XmlAccessorpe (xmlaccesstype.field)
kelas publik classa {
private int classid;
@Xmlelement (name = "classaname")
private string classaname;
classb classb pribadi;
public int getClassAid () {
mengembalikan Classid;
}
public void setClassAid (int classiid) {
this.classaid = classid;
}
string publik getClassaname () {
mengembalikan classaname;
}
public void setClassaname (string classaname) {
this.classaname = classaname;
}
public classb getClassB () {
mengembalikan classb;
}
public void setClassB (classb classb) {
this.classb = classb;
}
}
@XmlrooteLement
@XmlAccessorpe (xmlaccesstype.field)
kelas publik classb {
private int classbid;
Private String ClassBName;
public int getClasSbid () {
mengembalikan classbid;
}
public void setClassBid (int classbid) {
this.classbid = classbid;
}
string publik getClassBname () {
kembalikan classBname;
}
public void setClassBname (string classbName) {
this.classBname = classBname;
}
}
Output XML adalah
Salinan kode adalah sebagai berikut:
<? Xml Version = "1.0" encoding = "utf-8" mandiri = "ya"?>
<ns2: classa xmlns: ns2 = "cn.lzrabbit">
<slassiid> 11 </classaid>
<slassaname> a1 </smelasame>
<slassb>
<slumbid> 22 </classbid>
<MlassBname> B2 </classbname>
</classb>
</ns2: classa>
PS: Berikut adalah beberapa alat online untuk referensi Anda:
Alat konversi Mutual XML/JSON online:
http://tools.vevb.com/code/xmljson
Format XML Online/Kompres XML Online:
http://tools.vevb.com/code/xmlformat
XML Online Compression/Formatting Tools:
http://tools.vevb.com/code/xml_format_compress