Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melintasi Data XML dengan Cekap di Golang?
Untuk melintasi data XML di Golang, seseorang boleh menggunakan pendekatan pengekodan/xml vanila dengan membina struktur rekursif dan menggunakan fungsi berjalan .
type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` } func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
Pertimbangkan XML berikut:
<content> <p>this is content area</p> <animal> <p>This id dog</p> <dog> <p>tommy</p> </dog> </animal> <birds> <p>this is birds</p> <p>this is birds</p> </birds> <animal> <p>this is animals</p> </animal> </content>
Untuk melintasi XML dan memproses setiap nod dan anak-anaknya:
Lepaskan XML menjadi a struct:
var content Node if err := xml.Unmarshal(xmlData, &content); err != nil { // handle error }
Berjalan melalui struct menggunakan fungsi berjalan:
walk(content.Nodes, func(n Node) bool { // Process the node or traverse its child nodes here fmt.Printf("Node: %s\n", n.XMLName.Local) return true })
Untuk nod dengan atribut, berikut ialah versi yang dipertingkatkan:
type Node struct { XMLName xml.Name Attrs []xml.Attr `xml:",any,attr"` Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` } func (n *Node) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { n.Attrs = start.Attr type node Node return d.DecodeElement((*node)(n), &start) }
Ini membenarkan mengakses atribut dalam logik pemprosesan nod.
Atas ialah kandungan terperinci Bagaimana untuk Melintasi Data XML dengan Cekap di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!