XML-Datendurchquerung in Go
Problem:
XML-Daten stellen bei der Verarbeitung oft eine Herausforderung dar kommt dazu, auf bestimmte Elemente zuzugreifen, ohne vorher den XPath zu kennen. Die xml.Unmarshal-Methode weist diesbezüglich Einschränkungen auf, da Benutzer genaue Pfade angeben müssen, um Daten zu erhalten.
Lösung:
Um XML-Daten flexibel zu durchlaufen, können wir dies tun Nutzen Sie eine rekursive Datenstruktur neben einer einfachen Walk-Funktion.
Rekursive Daten Struktur:
type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }
In dieser Struktur stellt jeder Knoten ein Element im XML-Dokument dar und enthält seinen Namen, den inneren XML-Inhalt (für nicht verschachtelte Elemente) und einen Teil der untergeordneten Knoten.
Walk-Funktion:
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
Die Walk-Funktion durchläuft rekursiv die Knotenbaum, der die bereitgestellte Funktion f für jeden angetroffenen Knoten aufruft.
Verwendung:
Um ein XML-Dokument zu durchlaufen und seine Elemente entsprechend zu verarbeiten:
Beispiel:
Der folgende Code durchläuft das XML-Dokument in der Frage und gibt die Elementnamen aus Reihenfolge:
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 })
Ausgabe:
content p animal p dog p birds p p animal p
Das obige ist der detaillierte Inhalt vonWie kann ich XML-Daten in Go effizient durchlaufen, ohne XPath zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!