Um XML-Daten in Golang zu durchqueren, kann man einen Vanilla-Codierungs-/XML-Ansatz verwenden, indem man eine rekursive Struktur erstellt und eine Walk-Funktion verwendet .
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) } } }
Berücksichtigen Sie das folgende XML:
<content> <p>this is content area</p> <animal> <p>This id dog</p> <dog> <p>tommy</p> </dog> </animal> <birds> <p>this is birds</p> <p>this is birds</p> </birds> <animal> <p>this is animals</p> </animal> </content>
Um das XML zu durchlaufen und jeden Knoten und seine untergeordneten Knoten zu verarbeiten:
Entpacken Sie das XML in einen struct:
var content Node if err := xml.Unmarshal(xmlData, &content); err != nil { // handle error }
Gehen Sie mit dem Walk durch die Struktur Funktion:
walk(content.Nodes, func(n Node) bool { // Process the node or traverse its child nodes here fmt.Printf("Node: %s\n", n.XMLName.Local) return true })
Für Knoten mit Attributen gibt es hier eine erweiterte Version:
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) }
Dies ermöglicht den Zugriff auf Attribute innerhalb der Knotenverarbeitungslogik.
Das obige ist der detaillierte Inhalt vonWie kann man XML-Daten in Golang effizient durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!