Meneroka Data XML dengan Go
Anda menghadapi cabaran dalam menavigasi data XML dalam Go, khususnya mencari kaedah untuk melintasi keturunan nod tertentu tanpa menyatakan XPath yang tepat. Mari teroka pendekatan yang boleh membantu anda dalam tugasan ini.
Pengekodan XML Rekursi dan Vanila
Untuk mencapai traversal yang dalam, anda boleh menggunakan struktur rekursif dan berjalan lurus fungsi memanfaatkan pakej pengekodan/xml vanila Go:
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) } } }
Dalam kod ini, berjalan kaki fungsi melawati setiap anak nod secara rekursif. Anda boleh menyediakan fungsi tersuai f untuk melaksanakan operasi pada nod individu.
Sebagai contoh, dalam XML yang anda berikan, anda boleh menggunakan fungsi berjalan untuk memproses nod berdasarkan jenisnya, seperti ditunjukkan di bawah:
func handleNode(n Node) bool { switch n.XMLName.Local { case "p": // Process paragraphs case "dog": // Process dogs } return true // Keep traversing } walk([]Node{root}, handleNode)
Kemasukan Atribut
Sekiranya anda perlu mengakses atribut yang dikaitkan dengan nod, anda boleh melanjutkan Nod struct dan sesuaikan kaedah UnmarshalXML sewajarnya:
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) }
Dengan struktur yang diubah suai ini, anda boleh mendapatkan semula atribut dalam fungsi berjalan:
func handleNode(n Node) bool { for _, a := range n.Attrs { // Process attributes } return true // Keep traversing }
Dengan memanfaatkan rekursi dan menerima pengekodan XML vanila, anda boleh melintasi struktur XML yang kompleks dengan berkesan, mengakses nod dan atribut dengan mudah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melintasi Keturunan XML dengan Cekap dalam Go Tanpa Menggunakan XPath?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!