Maison >développement back-end >Golang >Comment parcourir efficacement les données XML dans Golang ?
Pour parcourir des données XML dans Golang, on peut utiliser une approche d'encodage Vanilla/XML en construisant une structure récursive et en employant une fonction de marche .
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) } } }
Considérez le XML suivant :
<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>
Pour parcourir le XML et traiter chaque nœud et ses enfants :
Désassemblez le XML en un struct :
var content Node if err := xml.Unmarshal(xmlData, &content); err != nil { // handle error }
Parcourir la structure en utilisant la marche function :
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 })
Pour les nœuds avec attributs, voici une version améliorée :
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) }
Cela permet d'accéder aux attributs dans la logique de traitement des nœuds.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!