Explorer les données XML avec Go
Vous êtes confronté à des difficultés lors de la navigation dans les données XML dans Go, en particulier pour trouver une méthode pour parcourir les descendants de un nœud particulier sans spécifier le XPath exact. Explorons une approche qui peut vous aider dans cette tâche.
Récursion et codage XML Vanilla
Pour réaliser une traversée approfondie, vous pouvez utiliser une structure récursive et une marche simple fonction exploitant le package d'encodage/xml vanilla de Go :
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) } } }
Dans ce code, la fonction walk visite récursivement les enfants de chaque nœud. Vous pouvez fournir une fonction personnalisée f pour effectuer des opérations sur des nœuds individuels.
Par exemple, dans le XML que vous avez fourni, vous pouvez utiliser la fonction walk pour traiter les nœuds en fonction de leur type, comme indiqué ci-dessous :
func handleNode(n Node) bool { switch n.XMLName.Local { case "p": // Process paragraphs case "dog": // Process dogs } return true // Keep traversing } walk([]Node{root}, handleNode)
Inclusion d'attributs
Si vous avez besoin d'accéder aux attributs associés aux nœuds, vous pouvez étendre la structure Node et personnaliser la méthode UnmarshalXML en conséquence :
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) }
Avec cette structure modifiée, vous pouvez récupérer des attributs dans la fonction walk :
func handleNode(n Node) bool { for _, a := range n.Attrs { // Process attributes } return true // Keep traversing }
En exploitant la récursivité et en adoptant le codage XML Vanilla, vous pouvez efficacement parcourez des structures XML complexes, en accédant facilement aux nœuds et aux attributs.
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!