Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melintasi dan Memproses Data XML dalam Go tanpa Menggunakan XPath?
Merentasi Data XML dalam Go tanpa Exact Xpath
Apabila menggunakan xml.UnMarshal untuk menyahkod XML ke dalam struct, seseorang mungkin menghadapi batasan dalam mengendalikan dinamik atau set data hierarki. Untuk menangani perkara ini, pertimbangkan untuk memanfaatkan mekanisme traversal tersuai untuk memproses nod dan keturunannya dengan cara yang fleksibel.
Pelaksanaan
Tentukan Nod Rekursif Struktur:
type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }
Buat Fungsi Berjalan untuk Rekursif Traversal:
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
Ini fungsi secara rekursif melintasi sekeping nod, memanggil fungsi yang disediakan f dengan setiap yang ditemui nod.
Dengan menggabungkan komponen di atas, anda boleh melintasi data XML dan memproses nod seperti berikut:
// Create a slice of nodes from your XML data nodes := []Node{} // Recursively walk the nodes walk(nodes, func(n Node) bool { // Process the node here (e.g., check type, access attributes) return true })
Contoh dengan Atribut
Untuk memasukkan atribut dalam traversal, ubah suai struktur Nod dan kaedah UnmarshalXMLnya:
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) }
Kesimpulan
Menggunakan ini pendekatan traversal rekursif, anda boleh melintasi dan memproses data XML dengan cekap tanpa bergantung pada Xpaths tertentu. Ini memberikan fleksibiliti yang lebih besar, membolehkan anda mengendalikan struktur XML dinamik atau berubah-ubah dengan mudah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melintasi dan Memproses Data XML dalam Go tanpa Menggunakan XPath?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!