Tugas membina dokumen XML daripada struktur Go boleh menimbulkan cabaran, terutamanya apabila berurusan dengan nama unsur yang berbeza-beza. Timbul persoalan: bolehkah kita mentakrifkan struct Go yang membenarkan nama elemen dinamik semasa proses marshaling XML?
Dokumentasi Go menyatakan bahawa medan XMLName dalam struct mestilah jenis xml.Name, bukan rentetan. Struktur ini mengandungi dua medan: "Ruang" dan "Tempatan." Untuk menetapkan nama elemen dinamik, ubah suai medan "Tempatan" dalam xml.Jenis nama.
type Person struct { XMLName xml.Name E1 string `xml:"ELEM1"` // ... }
Dalam contoh ini, kita' akan mempunyai struct dengan nama elemen ialah "Orang" atau "Penghantar" berdasarkan nilai yang disimpan dalam XMLName.Local medan.
import ( "encoding/xml" "fmt" ) type Person struct { XMLName xml.Name E1 string `xml:"ELEM1"` // ... } func main() { person := Person{XMLName: xml.Name{Local: "Person"}, E1: "Value1"} sender := Person{XMLName: xml.Name{Local: "Sender"}, E1: "Value1"} // Marshal the struct into XML personXML, _ := xml.Marshal(person) senderXML, _ := xml.Marshal(sender) fmt.Println(string(personXML)) fmt.Println(string(senderXML)) }
Contoh ini menghasilkan dua dokumen XML yang berbeza, satu dengan nama elemen "Orang" dan satu lagi dengan nama elemen "Penghantar."
Untuk versi interaktif contoh ini, lawati Go Playground: http://play.golang.org/p/bzSutFF9Bo
Atas ialah kandungan terperinci Bagaimana Saya Boleh Elemen XML Marshal dengan Nama Dinamik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!