Heim >Backend-Entwicklung >Golang >Wie kann ich XML-Daten in Go durchsuchen und verarbeiten, ohne XPath zu verwenden?

Wie kann ich XML-Daten in Go durchsuchen und verarbeiten, ohne XPath zu verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-30 15:40:10285Durchsuche

How Can I Traverse and Process XML Data in Go without Using XPath?

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

  1. Definieren ein rekursiver Knoten Struktur:

    type Node struct {
     XMLName xml.Name
     Content []byte `xml:",innerxml"`
     Nodes   []Node `xml:",any"`
    }
  2. 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.

  1. Traverse- und Prozessknoten:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn