Dalam Go, membuang XML dengan atribut dinamik boleh menjadi satu cabaran. Walau bagaimanapun, dengan penyelesaian Isu 3633 baru-baru ini, kini terdapat cara yang mudah dan cekap untuk menangani situasi ini.
Secara tradisinya, apabila menyahmarshaling XML dalam Go, anda akan tentukan struct dengan medan khusus untuk memadankan elemen XML yang dijangkakan. Walau bagaimanapun, apakah yang berlaku apabila anda menemui teg XML dengan atribut yang tidak dapat anda ramalkan?
Penyelesaian terletak pada penggunaan ",any,attr" " teg dalam definisi struct Go anda. Teg ini mengarahkan XML unmarshaler untuk mengumpulkan semua atribut elemen yang ditentukan ke dalam sekeping xml.Attr struct.
Pertimbangkan coretan XML berikut:
<TAG ATTR1="VALUE1" ATTR2="VALUE2" />
Untuk menyahmarshal XML ini ke dalam struct Go, anda boleh menggunakan yang berikut kod:
package main import ( "encoding/xml" "fmt" ) func main() { var v struct { Attributes []xml.Attr `xml:",any,attr"` } data := `<TAG ATTR1="VALUE1" ATTR2="VALUE2" />` err := xml.Unmarshal([]byte(data), &v) if err != nil { panic(err) } fmt.Println(v) }
Apabila anda menjalankan kod ini, struktur v akan diisi dengan data berikut:
{[]xml.Attr{ {Name: {Local: "ATTR1"}, Value: "VALUE1"}, {Name: {Local: "ATTR2"}, Value: "VALUE2"}, }}
Kepingan Atribut mengandungi dua struktur xml.Attr, setiap satu mewakili satu daripada atribut daripada teg XML.
",any,attr" teg menyediakan cara yang berkuasa dan fleksibel untuk menyahmarshal teg XML dengan atribut dinamik dalam Go. Dengan menggunakan ciri ini, anda boleh mengendalikan struktur XML yang tidak dapat diramalkan dengan mudah dan mengekstrak data yang anda perlukan ke dalam struktur tersuai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahmarshal XML dengan Atribut Dinamik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!