Maison >développement back-end >Golang >Comment puis-je parcourir efficacement des données XML en Go sans utiliser XPath ?
Traversée de données XML dans Go
Problème :
Les données XML présentent souvent des défis lorsqu'elles vient à accéder à des éléments spécifiques sans connaissance préalable de leur XPath. La méthode xml.Unmarshal présente des limites à cet égard, obligeant les utilisateurs à spécifier des chemins exacts pour obtenir des données.
Solution :
Pour parcourir les données XML de manière flexible, nous pouvons utiliser une structure de données récursive ainsi qu'une simple fonction de marche.
Données récursives Structure :
type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }
Dans cette structure, chaque nœud représente un élément du document XML, contenant son nom, le contenu XML interne (pour les éléments non imbriqués) et une tranche de nœuds enfants.
Fonction Walk :
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
La fonction walk parcourt récursivement l'arborescence des nœuds, appeler la fonction f fournie pour chaque nœud rencontré.
Utilisation :
Pour parcourir un document XML et traiter ses éléments en conséquence :
Exemple :
Le code suivant parcourt le document XML dans la question, imprimant les noms des éléments dans commande :
content := Node{} if err := xml.Unmarshal([]byte(rawXML), &content); err != nil { // Handle error } walk(content.Nodes, func(n Node) bool { fmt.Println(n.XMLName.Local) return true })
Sortie :
content p animal p dog p birds p p animal p
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!