Maison >développement back-end >Golang >Comment puis-je parcourir et traiter des données XML dans Go sans utiliser XPath ?

Comment puis-je parcourir et traiter des données XML dans Go sans utiliser XPath ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-30 15:40:10271parcourir

How Can I Traverse and Process XML Data in Go without Using 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

  1. Définir un nœud récursif Struct :

    type Node struct {
     XMLName xml.Name
     Content []byte `xml:",innerxml"`
     Nodes   []Node `xml:",any"`
    }
  2. 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.

  1. Nœuds de parcours et de processus :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn