1. เข้าใจเทคโนโลยีการแยกวิเคราะห์ XML
1.1. แนวคิดที่เกี่ยวข้องกับ XML
(1) กฎไวยากรณ์ DTD: XML ซึ่งเป็นกลไกการตรวจสอบของไฟล์ XML คุณสามารถเปรียบเทียบเอกสาร XML กับไฟล์ DTD เพื่อดูว่าเอกสารเป็นไปตามข้อกำหนดหรือไม่และใช้องค์ประกอบและฉลากอย่างถูกต้องหรือไม่
(2) XML เป็นพื้นฐานของ SOA
1.2. เทคโนโลยีการประมวลผล XML
(1) เพื่อใช้ XML เราจำเป็นต้องเข้าถึงข้อมูลผ่านโปรเซสเซอร์ XML หรือ XMLAPI ปัจจุบัน JAXP มีสองวิธีในการประมวลผล XML: DOM และ SAX
① DOM: DOM เข้าถึงข้อมูลและโครงสร้างในเอกสาร XML โดยทางโปรแกรมตามโครงสร้างต้นไม้ของเอกสาร XML ในหน่วยความจำ ข้อเสียคือต้องใช้ค่าใช้จ่ายจำนวนมากในการโหลดเอกสาร XML ทั้งหมดลงในหน่วยความจำ
②sax: ขึ้นอยู่กับเหตุการณ์ที่ขับเคลื่อนด้วยเหตุการณ์หนึ่งส่วนถูกใช้เพื่อแยกวิเคราะห์ส่วนหนึ่งซึ่งแก้ปัญหาของ DOM ที่ใช้หน่วยความจำจำนวนมาก แต่ข้อเสียของมันคือมันไม่สามารถเข้าถึงเอกสารแบบสุ่มได้
(2) เพื่อแก้ปัญหาของ DOM และ SAX จะปรากฏว่ามีสตรีมที่ใช้สตรีม (Stax สำหรับระยะสั้น) ปรากฏขึ้น มันถูกเพิ่มเข้าไปใน Jaxp1.4 ของ JDK6 และ Stax ก็เป็นตัวขับเคลื่อนเหตุการณ์
(3) DOM, SAX และ Stax ทั้งหมดกระบวนการ XML จากโครงสร้างเอกสาร แต่แอปพลิเคชันจำนวนมากมุ่งเน้นไปที่ข้อมูลเอกสารเท่านั้นดังนั้นเทคโนโลยีการเชื่อมโยงข้อมูล XML จึงเกิดขึ้น
การเชื่อมโยงข้อมูล: หมายถึงกระบวนการแยกข้อมูลจากสื่อจัดเก็บข้อมูล (เอกสาร XML และฐานข้อมูล) และแสดงข้อมูลนี้ผ่านโปรแกรมนั่นคือการเชื่อมโยงข้อมูลกับโครงสร้างหน่วยความจำที่เครื่องเสมือนสามารถเข้าใจและทำงานได้
เฟรมเวิร์ก XML Binding: Castor, Jaxb, Jibx, Quick, Zeus ฯลฯ
2. เครื่องมือการประมวลผล XML: xstream
2.1. ภาพรวม xstream
(1) Xstream เป็นเฟรมเวิร์กโอเพนซอร์สที่ง่ายและใช้งานง่ายสำหรับการทำให้เป็นอนุกรมวัตถุ Java ลงใน XML หรือ deserializing XML ลงในวัตถุ Java คุณสมบัติที่สำคัญของ Xstream:
(2) องค์ประกอบสถาปัตยกรรม Xstream:
ตัวแปลง: เมื่อ Xstream พบวัตถุที่ต้องแปลงมันจะถูกมอบหมายให้การใช้งานตัวแปลงที่เหมาะสม
IO (อินพุต/เอาท์พุท): Xstream ถูกแยกออกจากข้อมูล XML พื้นฐานผ่าน HierarchicalStreamWriter และ HierarchicalStreamReader และใช้สำหรับการดำเนินการแบบอนุกรมและการดำเนินการ deserialization ตามลำดับ
บริบท: เมื่อ xstream serializes วัตถุ deserialization, สองคลาส marshallingcontext และ unmarshallingContext ถูกสร้างขึ้นและประตูหอคอยจะประมวลผลข้อมูลและมอบหมายให้ตัวแปลงที่เหมาะสม
ด้านหน้า (ทางเข้ารวม): รวม 3 คะแนนข้างต้นเข้าด้วยกันและเปิดให้ผู้ใช้ด้วยอินเทอร์เฟซแบบครบวงจร
2.2. เริ่มต้นอย่างรวดเร็ว
(1) สร้าง Xstream และระบุตัวแยกวิเคราะห์ XML
xstreamxstream = newxstream (newdomDriver ());
หากคุณไม่ได้ระบุตัวแยกวิเคราะห์ Xstream จะใช้ตัวแยกวิเคราะห์ XPP (XMLPULLPARSER) โดยค่าเริ่มต้นซึ่งเป็นตัวแยกวิเคราะห์ความเร็วสูง
(2) ตัวอย่างมีดังนี้:
2.3. ใช้นามแฝง xstream
(1) ในตัวอย่างด้านบนชื่อคลาสเต็มของวัตถุ Java สอดคล้องกับองค์ประกอบรูทของไฟล์ XML และชื่อแอตทริบิวต์สอดคล้องกับองค์ประกอบโหนดของไฟล์ XML อย่างไรก็ตามในสถานการณ์จริงทั้งวัตถุ Java และวัตถุ XML อาจมีชื่อที่กำหนดไว้แล้วดังนั้นจึงจำเป็นต้องมีการแมปนามแฝง
Xstream มีการกำหนดค่านามแฝง 3 ครั้ง:
ชื่อหมวดหมู่: ใช้นามแฝง (StringName, Classtype)
นามแฝงสมาชิกระดับ: ใช้ aliasfield (Stringalias, classdefinedin, StringfieldName)
สมาชิกในชั้นเรียนถูกใช้เป็นแอตทริบิวต์นามแฝง: ใช้ aliasattribute (classdefinedin, stringattributeName, stringalias) และการตั้งชื่อพวกเขาเพียงอย่างเดียวไม่มีความหมายและพวกเขาจะต้องนำไปใช้กับคลาสที่แน่นอนผ่าน USEATTRIBORTIONS
(2) แก้ไขตัวอย่างใน 2.2 ถึงนามแฝง:
2.4. Xstream Converter
ในระหว่างกระบวนการพัฒนาบางครั้งคุณต้องแปลงบางประเภทที่กำหนดเอง เพียงใช้อินเตอร์เฟสตัวแปลงและโทรไปที่เมธอด registerConverter () ของ Xstream เพื่อลงทะเบียนตัวแปลง
2.5. คำอธิบายประกอบ Xstream
(1) คำอธิบายประกอบทั่วไปสำหรับ Xstream มีดังนี้:
(2) ใช้
xstreamxstream = newxstream (newdomDriver ());
มี 2 วิธีในการโหลดวัตถุ:
①วิธี 1:
xstream.processannotations (aaa.class);
xstream.processannotations (bbb.class);
②วิธีที่ 2:
xstream.autodetectannotations (จริง); // โหลดอัตโนมัติโหลดถั่วและยังแคชวัตถุที่มีคำอธิบายประกอบ
2.6. วัตถุที่ไหล
(1) Xstream ให้การใช้งานทางเลือกสำหรับ ObjectInputStream และ ObjectOutputStream ช่วยให้การดำเนินการอนุกรม XML หรือการดำเนินการ deserialization ในรูปแบบของการสตรีมวัตถุ ก่อนหน้านี้คือ XML อ่านโดยตัวแยกวิเคราะห์ XML ที่ใช้ DOM ที่นี่เราควรใช้วิธีการสตรีมสำหรับการแยกวิเคราะห์อย่างชัดเจน
ตัวอย่างมีดังนี้:
(2) ความแตกต่างระหว่างการใช้ PrettyWriter และ CompactWriter คือ PrettyWriter จะจัดรูปแบบ XML ที่สร้างขึ้นในขณะที่ CompactWriter จะบีบอัด XML ที่สร้างขึ้น
2.7. การคงอยู่ API
(1) XStream ให้วิธีง่ายๆในการคงไว้ซึ่งวัตถุในคอลเลกชันลงในไฟล์เช่น: XMLARRAYLIST, XMLSET, XMLMAP ฯลฯ
(2) ก่อนที่จะสร้างคอลเลกชันคุณต้องระบุกลยุทธ์การคงอยู่ต่อไป
2.8. จัดการ JSON
(1) XML มีตำแหน่งที่ไม่สั่นคลอนใน Webservice แต่ในเว็บแอปพลิเคชันส่วนใหญ่ JSON น้ำหนักเบาจะยังคงใช้เป็นรูปแบบการแลกเปลี่ยนข้อมูล
(2) Xstream ให้ JettisonMappedxmldriver และ JsonHierarchicalStreamDriver เพื่อทำการแปลงวัตถุ Java และ JSON ให้เสร็จสมบูรณ์
ตัวอย่างมีดังนี้:
(3) ความแตกต่างระหว่าง JettisonMappedxmldriver และ JsonHierarchicalStreamDriver:
①JettisonMappedxMldriverสร้าง JSON ที่ถูกบีบอัดในขณะที่ JsonHierarchicalStreamDriver สร้าง JSON ที่จัดรูปแบบ
②หากคุณต้องการแปลง JSON เป็นวัตถุคุณสามารถใช้ JettisonMappedxMldriver ได้เท่านั้น
3. โครงการโอเพนซอร์ส O/XMApping ทั่วไปอื่น ๆ
การเปรียบเทียบ JAXB, XMLBEANS, CSTOR, JIBX:
4. การรวมกับ Springoxm
4.1. ภาพรวมของ Springoxm
(1) SpringOxM ได้ทำสิ่งที่เป็นนามธรรมและการห่อหุ้มของกรอบการทำงานของ O/XMApping กระแสหลัก Marshaller และ Unmarshaller เป็นอินเทอร์เฟซหลักสองส่วนของ Springoxm Marshaller ใช้ในการแปลงวัตถุเป็น XML และ unmarshaller ใช้เพื่อแปลง XML เป็นวัตถุ
(2) wrappers ส่วนประกอบ O/Xmapping มีดังนี้:
4.2. กำหนดค่าในฤดูใบไม้ผลิ
(1) อินสแตนซ์การกำหนดค่า XStreamMarshaller:
5. สรุป
(1) การเชื่อมโยงข้อมูล XML ของแอปพลิเคชัน Java สามารถสรุปได้เป็น 2 วิธี:
สร้างรหัสภาษา Java (เช่น Jaxb, Xmlbeans, Castor) ตามเอกสาร XML
ใช้วิธีการเชื่อมโยงการทำแผนที่บางรูปแบบนั่นคือตั้งค่าวิธีการคลาส Java เกี่ยวข้องกับ XML (เช่น Xstream, Castor, JIBX)
(2) การเปรียบเทียบ 2 วิธี:
การใช้โครงสร้างเอกสารที่เสถียรที่กำหนดโดย Schema หรือ DTD และโครงสร้างเหมาะสำหรับความต้องการของแอปพลิเคชันวิธีการสร้างรหัสอาจเป็นตัวเลือกที่ดีที่สุด
หากคุณใช้คลาส Java ที่มีอยู่หรือหากคุณต้องการใช้โครงสร้างของคลาสที่สะท้อนการใช้ข้อมูลของแอปพลิเคชันมากกว่าโครงสร้าง XML วิธีการทำแผนที่เป็นตัวเลือกที่ดีที่สุด
สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับสปริงโดยใช้ OXM สำหรับการวิเคราะห์การทำแผนที่ Object XML ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!