Menyahmarshal Elemen XML dengan Atribut dan Nilai Titik Terapung
Untuk menyahmarshal elemen XML dengan atribut dan nilai titik terapung, anda boleh menentukan a Go struct dengan medan yang sepadan. Walau bagaimanapun, terdapat beberapa pertimbangan berkenaan penggunaan sifat xml.Name.
Dalam elemen XML yang disediakan:
<code class="xml"><thing prop="1"> 1.23 </thing></code>
Struktur ThingElem harus mempunyai sifat berikut:
Pilihan 1: Dengan XMLName
Dalam pilihan ini, anda boleh menambah medan xml.Name pada struct ThingElem. Medan ini biasanya digunakan apabila struktur XML tidak jelas. Dalam kes ini, ia tidak perlu kerana jelas bahawa struct sepadan dengan elemen perkara.
<code class="go">type ThingElem struct { XMLName xml.Name `xml:"thing"` // Do I even need this? Prop int `xml:"prop,attr"` Value float // ??? }</code>
Pilihan 2: Tanpa Nama XML
Memandangkan tiada kesamaran dalam struktur XML, anda boleh meninggalkan medan xml.Name.
<code class="go">type ThingElem struct { Prop int `xml:"prop,attr"` Value float // ??? }</code>
Menyahmarshaling Nilai Titik Terapung
Untuk menyahmarshal nilai titik terapung dengan betul, anda perlu pastikan tiada ruang dalam XML. Dalam contoh anda, nilainya ialah 1.23, tetapi disyorkan untuk mengalih keluar ruang dan menyimpannya sebagai 1.23.
Menyahmarshaling Data Bersarang
Anda juga boleh menyahmarshal data bersarang dengan mentakrifkan struktur pembalut. Sebagai contoh, XML mengandungi pelbagai elemen perkara. Untuk menyahmarshal mereka, anda akan mentakrifkan struct ThingWrapper:
<code class="go">type ThingWrapper struct { T ThingElem `xml:"thing"` }</code>
Contoh Kod Lengkap
Berikut ialah contoh kod lengkap yang menyahmarshal data XML yang disediakan:
<code class="go">package main import ( "encoding/xml" "fmt" ) type Root struct { Things []Thing `xml:"thing"` } type Thing struct { Prop int `xml:"prop,attr"` Value float64 `xml:",chardata"` } func main() { data := `<root><thing prop="1">1.23</thing><thing prop="2">4.56</thing></root>` thing := &Root{} err := xml.Unmarshal([]byte(data), thing) if err != nil { fmt.Println(err) return } fmt.Println(thing) }</code>
Kod ini akan mencetak data XML yang dihuraikan, termasuk atribut prop dan nilai titik terapung.
Atas ialah kandungan terperinci Adakah Saya Perlu Menggunakan XMLName untuk Menyahmarshaling Elemen XML dengan Atribut dan Nilai Titik Terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!