XML-Daten in Go ohne exakten XPath durchqueren
Bei der Verwendung von xml.UnMarshal zum Dekodieren von XML in Strukturen kann es zu Einschränkungen bei der Handhabung der Dynamik kommen oder hierarchische Datensätze. Um dieses Problem zu lösen, sollten Sie einen benutzerdefinierten Traversalmechanismus nutzen, um Knoten und ihre Nachkommen auf flexible Weise zu verarbeiten.
Implementierung
Definieren ein rekursiver Knoten Struktur:
type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }
Erstellen Sie eine Walk-Funktion für rekursive Durchquerung:
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
Dies Die Funktion durchläuft rekursiv ein Segment von Knoten und ruft bei jedem angetroffenen Knoten die bereitgestellte Funktion f auf Knoten.
Durch die Kombination der oben genannten Komponenten können Sie die XML-Daten- und Prozessknoten wie folgt durchlaufen:
// 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 })
Beispiel mit Attributen
Einzubinden Attribute in der Durchquerung, ändern Sie die Node-Struktur und ihre UnmarshalXML-Methode:
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) }
Fazit
Mit diesem rekursiven Durchquerungsansatz können Sie XML-Daten effizient durchqueren und verarbeiten ohne auf bestimmte XPaths angewiesen zu sein. Dies bietet mehr Flexibilität und ermöglicht Ihnen den problemlosen Umgang mit dynamischen oder variablen XML-Strukturen.
Das obige ist der detaillierte Inhalt vonWie kann ich XML-Daten in Go durchsuchen und verarbeiten, ohne XPath zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!