"Baiklah, kalau begitu. Seperti yang anda mungkin sudah meneka, itu bukan segala-galanya."

"Sekarang saya akan memberitahu anda tentang beberapa aspek lain JAXB. Tetapi seperti yang kami lakukan dengan JSON, kami akan bermula dengan koleksi."

"Apabila menyahsiri koleksi menggunakan JAXB, terdapat juga ketidakpastian tentang koleksi tertentu (ArrayList, LinkedList, Vector, dll.) untuk digunakan untuk pembolehubah Senarai. Dan sekali lagi jawapan kepada soalan ini disediakan oleh anotasi."

"Semuanya agak mudah. ​​Jika jenis koleksi tidak dinyatakan dalam anotasinya, maka JAXB akan cuba memilih koleksi yang paling sesuai menggunakan jenisnya. Untuk Senarai, ini ialah ArrayList; untuk Peta, ia akan menjadi HashMap, dsb. ."

"Pada hakikatnya, terdapat lebih sedikit masalah di sini berbanding dengan JSON, kerana setiap kelas mempunyai teg unik dan anda boleh menggunakan teg untuk menentukan kelas yang tepat."

"Sebagai contoh, jika anda perlu menyahsiri sekumpulan elemen yang mewarisi nenek moyang yang sama, anda menggunakan  @XmlAny: anotasi"

Tukar objek daripada XML
public static void main(String[] args) throws JAXBException
{
 String xmldata = "<zoo><cat/><cat/><dog/><cat/></zoo>";
 StringReader reader = new StringReader(xmldata);

 JAXBContext context = JAXBContext.newInstance(Cat.class, Zoo.class, Dog.class);
 Unmarshaller unmarshaller = context.createUnmarshaller();

 Cat cat = (Cat) unmarshaller.unmarshal(reader);
}
Kelas yang objeknya dinyahsiri daripada XML
@XmlType(name = "zoo") 
@XmlRootElement 
class  Zoo 
{ 
@XmlAny public  List<Object> haiwan; } 
 


@XmlType(name = "cat") 
@XmlRootElement 
class  Cat 
{ 
public  String name; umur int awam  ;  berat int awam ; 
 
 

 Kucing() 
 { 
 } 
}

@XmlType(name = "dog") 
@XmlRootElement 
class  Dog 
{ 
public  String name; umur int awam  ; berat int awam  ; 
 
 

 Kucing() 
 { 
 } 

"Jika koleksi ditandakan dengan anotasi @XmlAny , maka sebarang objek yang sesuai boleh diletakkan di dalamnya. Dan JAXB Unmarshaller memberi perhatian kepada tag apabila mengisi koleksi."

"Dalam kes ini, jujukan teg " <zoo> <cat/><cat/> <dog/> <cat/> </zoo> " akan ditukar menjadi koleksi dengan objek Cat, Cat, Dog dan Cat ."

"Itu kira-kira apa yang saya jangkakan."

"Uh-huh. Oh, satu perkara lagi. Jika anda menyahsiri campuran teks dan teg, anda perlu menggunakan anotasi @XmlMixed ."

"Berikut ialah contoh jenis XML ini:"

Contoh XML yang memerlukan anotasi @XmlMixed
<data> 
<item> 
ujian 1 <item/> teks 2 <item> nama </item> teks 3 </item> </data> 

 

 

 

"Wah. Saya terlupa bahawa XML sebegitu wujud. Saya terbiasa dengan segala-galanya cantik, dengan teg terbenam dan segala-galanya."

"Ia memang wujud. Dan JAXB mempunyai anotasi walaupun untuk kes ini!"

"Hebat. Ngomong-ngomong, saya ingin bertanya: bagaimanakah enum bersiri?"

"Soalan yang bagus! Tangkapan yang bagus! Saya entah bagaimana melangkau topik itu."

"Terdapat anotasi @XmlEnum khas yang mesti digunakan untuk menandakan enum. Anda boleh menggunakannya untuk menentukan sama ada nilai akan disimpan sebagai nombor atau rentetan."

"Terdapat juga anotasi @XmlEnumValue yang membolehkan anda menentukan nilai yang sepadan dengan medan enum tertentu."

"Berikut adalah beberapa contoh:"

Nombor rentetan
@XmlType
@XmlEnum(Integer.class)
public enum Code
{
 @XmlEnumValue("1")
  START,

 @XmlEnumValue("2")
  INPROGRESS,

 @XmlEnumValue("3")
  FINISH

 @XmlEnumValue("-1")
  ERROR
}
@XmlType
@XmlEnum(String.class)
public enum Card
{
 @XmlEnumValue("Spade")
  CLUBS,

 @XmlEnumValue("Diamond")
  DIAMONDS,

 @XmlEnumValue("Heart")
  HEARTS,

 @XmlEnumValue("Club")
  SPADES
}

"Holy moly. Saya tidak dapat bayangkan di mana saya memerlukan ini, tetapi saya fikir ia sangat berguna. Dan yang paling penting, saya tidak perlu berpegang pada rentetan standard atau nilai angka."

"Ya. Ini berguna, sebagai contoh, apabila anda menulis program yang bertukar-tukar mesej dengan, katakan, pelayan Facebook, dan mereka mempunyai set nilai yang ditetapkan. Anda hanya perlu menetapkannya ke enum mereka sendiri dan semuanya akan berfungsi. "

"Itu bagus. Saya pasti suka JAXB."

"Bagus. Kalau begitu sahaja untuk hari ini. Pergilah berehat."