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
Libérer: 2024-11-30 15:40:10
original
274 Les gens l'ont consulté

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"`
    }
    Copier après la connexion
  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)
         }
     }
    }
    Copier après la connexion

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
})
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal