ขั้นแรกให้กำหนดคลาสตัวอย่างสองคลาส classa และ classb สำหรับการสาธิตตัวอย่างที่ตามมา
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ CN.LZRABBIT;
คลาสสาธารณะ Classa {
Classaid ส่วนตัว
สตริงส่วนตัว classaname;
Classb ส่วนตัว classb;
สาธารณะ int getClassaid () {
กลับมา Classaid;
-
โมฆะสาธารณะ setClassAid (int classaid) {
this.classaid = classaid;
-
สตริงสาธารณะ getClassaname () {
กลับ classaname;
-
โมฆะสาธารณะ setClassaname (สตริง classaname) {
this.classaname = classaname;
-
Classb สาธารณะ getClassB () {
กลับ classb;
-
โมฆะสาธารณะ setClassB (classb classb) {
this.classb = classb;
-
-
ชั้นเรียน
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ CN.LZRABBIT;
คลาสสาธารณะชั้นเรียน {
คลาสส่วนตัว int bid;
สตริงส่วนตัวคลาส BNAME;
สาธารณะ int getClassBid () {
กลับชั้นเรียน;
-
โมฆะสาธารณะ setClassBid (int classbid) {
this.classBid = classBid;
-
สตริงสาธารณะ getClassBname () {
ส่งคืน classbname;
-
โมฆะสาธารณะ setClassBname (สตริงคลาส BNAME) {
this.classBname = classBname;
-
-
ชั้นเรียน
xmlutil สำหรับการทำให้เป็นอนุกรม
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ CN.LZRABBIT;
นำเข้า java.io.stringReader;
นำเข้า java.io.stringWriter;
นำเข้า Javax.xml.bind.*;
คลาสสาธารณะ xmlutil {
สตริงคงที่สาธารณะ Toxml (Object OBJ) {
พยายาม {
jaxbcontext context = jaxbcontext.newinstance (obj.getClass ());
Marshaller Marshaller = context.createMarshaller ();
Marshaller.SetProperty (Marshaller.jaxb_encoding, "UTF-8"); // // รูปแบบการเข้ารหัส
marshaller.setProperty (marshaller.jaxb_formatted_output, true); // ว่าจะจัดรูปแบบสตริง XML ที่สร้างขึ้น
Marshaller.SetProperty (Marshaller.jaxb_fragment, False); // ว่าจะละเว้นข้อมูลการประกาศส่วนหัว XM
StringWriter Writer = ใหม่ StringWriter ();
Marshaller.Marshal (OBJ, นักเขียน);
Return Writer.toString ();
} catch (Exception e) {
โยน RuntimeException ใหม่ (E);
-
-
@suppresswarnings ("ไม่ได้ตรวจสอบ")
สาธารณะคงที่ <t> t fromxml (สตริง xml, คลาส <t> valuetype) {
พยายาม {
jaxbcontext context = jaxbcontext.newinstance (valueType);
unmarshaller unmarshaller = context.createunmarshaller ();
return (t) unmarshaller.unmarshal (stringreader ใหม่ (xml));
} catch (Exception e) {
โยน runtimeException ใหม่ (e.getMessage ());
-
-
-
xmlutil
การโทรมีดังนี้:
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ CN.LZRABBIT;
ชั้นเรียนสาธารณะ mainrun {
-
* @param args
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
classb classb = ใหม่ classb ();
classb.setClassBid (22);
classb.setClassBname ("B2");
classa classa = ใหม่ classa ();
classa.setClassaid (11);
classa.setClassaname ("A1");
classa.setClassB (ClassB);
System.out.println (xmlutil.toxml (classa));
-
-
เมนรัน
ผลลัพธ์ผลลัพธ์มีดังนี้:
การคัดลอกรหัสมีดังนี้:
<? xml version = "1.0" encoding = "utf-8" standalone = "ใช่"?>
<classa>
<SclassAID> 11 </classaid>
<classaname> A1 </sclassaname>
<sclassb>
<scrassbid> 22 </classbid>
<sclassbname> b2 </classbname>
</classb>
</classa>
นี่คือบางประเด็นที่ควรทราบ
1. เพิ่มคำอธิบายประกอบ @xmlrootelement ลงในคลาส Serialized มิฉะนั้นจะมีการรายงานข้อผิดพลาด (พรอมต์ข้อผิดพลาดชัดเจนมากดังนั้นฉันจะไม่โพสต์ที่นี่)
2Jaxb ทำให้เป็นอนุกรมและตัวตั้งค่าโดยค่าเริ่มต้นเมื่อ serializing XML และ getters และ setters จะต้องปรากฏเป็นคู่ก่อนที่พวกเขาจะเป็นอนุกรม
3 ชื่อแอตทริบิวต์ สิ่งที่คุณต้องให้ความสนใจที่นี่คือ @xmlelement สามารถวางไว้บน getter หรือ setter ได้ แต่สามารถวางได้เพียงอันเดียวซึ่งหมายความว่าไม่สามารถใช้คำอธิบายประกอบ @xmlelement ใน Getter และ Setter ได้ในเวลาเดียวกัน
4 วิธีควบคุมชื่อโหนดรูท?
ใช้ @xmlrootelement เพื่อระบุแอตทริบิวต์ชื่อเช่น @xmlrootelement (name = "classa")
5 วิธีเพิ่มเนมสเปซเพื่อระบุแอตทริบิวต์เนมสเปซโดยใช้ @xmlrootelement (namespace = "cn.lzrabbit")
6 วิธีควบคุมชื่อแอตทริบิวต์อย่างถูกต้อง
การแปลง JAXB เป็นตัวพิมพ์เล็กโดยอัตโนมัติจะทำให้ชื่อแอตทริบิวต์ที่ไม่สามารถคาดการณ์ได้จะปรากฏขึ้น
7 วิธีการใช้งานอนุกรมโดยใช้ฟิลด์ฟิลด์แทนตัวตั้งค่าและ getters
เพิ่ม @xmlaccessortype (xmlaccesstype.field) คำอธิบายประกอบในชั้นเรียนที่คุณต้องการใช้และระบุเป็น XmlaccessType.field . แทนการตั้งค่าคำอธิบายประกอบ @xmlelement (name = "") สำหรับแต่ละแอตทริบิวต์แน่นอนคุณสามารถใช้คำอธิบายประกอบ @xmlelement บนสนาม
ต่อไปนี้เป็นตัวอย่างรหัสโดยใช้คำอธิบายประกอบข้างต้น
การคัดลอกรหัสมีดังนี้:
@xmlrootelement (namespace = "cn.lzrabbit"))
@xmlaccessortype (xmlaccesstype.field)
คลาสสาธารณะ Classa {
Classaid ส่วนตัว
@xmlelement (name = "classaname")
สตริงส่วนตัว classaname;
Classb ส่วนตัว classb;
สาธารณะ int getClassaid () {
กลับมา Classaid;
-
โมฆะสาธารณะ setClassAid (int classaid) {
this.classaid = classaid;
-
สตริงสาธารณะ getClassaname () {
กลับ classaname;
-
โมฆะสาธารณะ setClassaname (สตริง classaname) {
this.classaname = classaname;
-
Classb สาธารณะ getClassB () {
กลับ classb;
-
โมฆะสาธารณะ setClassB (classb classb) {
this.classb = classb;
-
-
@xmlrootelement
@xmlaccessortype (xmlaccesstype.field)
คลาสสาธารณะชั้นเรียน {
คลาสส่วนตัว int bid;
สตริงส่วนตัวคลาส BNAME;
สาธารณะ int getClassBid () {
กลับชั้นเรียน;
-
โมฆะสาธารณะ setClassBid (int classbid) {
this.classBid = classBid;
-
สตริงสาธารณะ getClassBname () {
ส่งคืน classbname;
-
โมฆะสาธารณะ setClassBname (สตริงคลาส BNAME) {
this.classBname = classBname;
-
-
XML เอาท์พุทคือ
การคัดลอกรหัสมีดังนี้:
<? xml version = "1.0" encoding = "utf-8" standalone = "ใช่"?>
<ns2: classa xmlns: ns2 = "cn.lzrabbit">
<SclassAID> 11 </classaid>
<classaname> A1 </sclassaname>
<sclassb>
<scrassbid> 22 </classbid>
<sclassbname> b2 </classbname>
</classb>
</ns2: classa>
PS: นี่คือเครื่องมือออนไลน์บางอย่างสำหรับการอ้างอิงของคุณ:
เครื่องมือแปลง Mutual XML/JSON ออนไลน์:
http://tools.vevb.com/code/xmljson
รูปแบบ XML ออนไลน์/บีบอัด XML ออนไลน์:
http://tools.vevb.com/code/xmlformat
เครื่องมือการบีบอัด/การจัดรูปแบบออนไลน์ XML:
http://tools.vevb.com/code/xml_format_compress