Perjalanan Data XML dalam Go
Masalah:
Data XML sering memberikan cabaran apabila ia datang untuk mengakses elemen tertentu tanpa pengetahuan awal tentang XPath mereka. Kaedah xml.Unmarshal mempunyai had dalam hal ini, yang memerlukan pengguna untuk menentukan laluan tepat untuk mendapatkan data.
Penyelesaian:
Untuk melintasi data XML secara fleksibel, kami boleh gunakan struktur data rekursif di samping fungsi berjalan mudah.
Data Rekursif Struktur:
type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }
Dalam struktur ini, setiap Nod mewakili elemen dalam dokumen XML, yang mengandungi namanya, kandungan XML dalaman (untuk elemen tidak bersarang) dan sepotong nod kanak-kanak.
Fungsi Berjalan:
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
Fungsi berjalan secara rekursif melintasi pepohon Nod, memanggil fungsi yang disediakan f untuk setiap nod yang ditemui.
Penggunaan:
Untuk melintasi dokumen XML dan memproses elemennya dengan sewajarnya:
Contoh:
Kod berikut merentasi dokumen XML dalam soalan, mencetak nama elemen dalam pesanan:
content := Node{} if err := xml.Unmarshal([]byte(rawXML), &content); err != nil { // Handle error } walk(content.Nodes, func(n Node) bool { fmt.Println(n.XMLName.Local) return true })
Output:
content p animal p dog p birds p p animal p
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melintasi Data XML dengan Cekap Tanpa Menggunakan XPath?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!