editor php Banana akan memperkenalkan anda kepada kaedah unmarshaling teg XML bernombor dalam bahasa Go. Bahasa Go menyediakan fungsi xml.Unmarshal, yang boleh menyahmarshal data XML ke dalam struktur Go. Apabila unmarshalling, kita boleh menggunakan tag untuk menentukan hubungan pemetaan antara elemen XML dan medan struktur. Dengan menambahkan `xml:"tag"` pada teg medan struktur, kami boleh mengaitkan teg tertentu dalam XML dengan medan struktur untuk mencapai operasi unmarshalling automatik. Kaedah ini mudah dan cekap, menjadikan pemprosesan data XML dalam bahasa Go mudah dan menyeronokkan.
Saya telah mencuba banyak struktur untuk mencuba dan membongkar xml ini tetapi saya tidak dapat memahaminya:
package main import ( "bytes" "encoding/xml" "fmt" ) type SettingContainer struct { XMLName xml.Name `xml:"Settings"` Settings []Setting `xml:",any"` } type Setting struct { XMLName xml.Name `xml:",any"` SettingRegisters []SettingRegister `xml:",any"` } type SettingRegister struct { XMLName xml.Name `xml:",any"` Value string `xml:"value,attr"` } func main() { var xmlData = bytes.NewBufferString(` <Settings> <Setting0> <Setting0_register value="0x20" /> <Setting0ArbitraryName value="0x0" /> </Setting0> <Setting1> <Setting1_register value="0x60" /> <Setting1WhateverEnable value="0x0" /> </Setting1> <Setting2> <Setting2_register value="0x80" /> <Setting2blahblah value="0x1" /> </Setting2> <Setting4> <Setting4_register value="0x2fffff8" /> <Setting4ThisCanBeAnything value="0x0" /> </Setting4> </Settings>`) var s []SettingContainer xml.Unmarshal(xmlData.Bytes(), &s) for _, i := range s { fmt.Println(i) } }
Saya tidak boleh mendapatkannya untuk mencetak apa-apa. Medan yang sebenarnya saya perlukan ialah attr nilai settingn_register dan nama tag settingn. Bagaimanakah saya boleh menyahmarshal xml ke dalam medan ini dengan betul? Saya sedang berfikir untuk membuat fungsi unmarshalling tersuai, tetapi saya tidak dapat mencari cara untuk membuatnya dengan betul. Saya hanya mendapat nama teg "tetapan" daripada xml ini.
Dari xmlname
字段中删除 xml:",any"
标记(这会导致解码器尝试将额外的子元素映射到此字段),并将其解组为 settingcontainer
而不是 []settingcontainer
Sebagai dokumen xml hanya boleh mempunyai satu elemen akar. Contoh kerja di sini: https://www.php.cn/link/d2949eb6aaa490c835219e945ff37dad
type SettingContainer struct { XMLName xml.Name `xml:"Settings"` Settings []Setting `xml:",any"` } type Setting struct { XMLName xml.Name SettingRegisters []SettingRegister `xml:",any"` } type SettingRegister struct { XMLName xml.Name Value string `xml:"value,attr"` } func main() { var xmlData = bytes.NewBufferString(`...`) var s SettingContainer xml.Unmarshal(xmlData.Bytes(), &s) fmt.Println(s) }
Atas ialah kandungan terperinci Membongkar teg XML bernombor dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!