Maison >développement back-end >Golang >Comment puis-je parcourir et traiter des données XML dans Go sans utiliser XPath ?
Parcourir des données XML dans Go sans Exact Xpath
Lors de l'utilisation de xml.UnMarshal pour décoder XML en structures, on peut rencontrer des limitations dans la gestion dynamique ou des ensembles de données hiérarchiques. Pour résoudre ce problème, envisagez d'exploiter un mécanisme de parcours personnalisé pour traiter les nœuds et leurs descendants de manière flexible.
Mise en œuvre
Définir un nœud récursif Struct :
type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }
Créer une fonction de marche pour le parcours récursif :
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
Ceci la fonction parcourt récursivement une tranche de nœuds, appelant la fonction fournie f à chaque rencontre node.
En combinant les composants ci-dessus, vous pouvez parcourir les données XML et traiter les nœuds comme suit :
// 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 })
Exemple avec attributs
À inclure attributs dans le parcours, modifiez la structure Node et sa méthode UnmarshalXML :
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) }
Conclusion
En utilisant cette approche de parcours récursif, vous pouvez parcourir et traiter efficacement les données XML sans compter sur des XPaths spécifiques. Cela offre une plus grande flexibilité, vous permettant de gérer facilement des structures XML dynamiques ou variables.
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!