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
Freigeben: 2024-11-30 15:40:10
Original
287 Leute haben es durchsucht

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"`
    }
    Nach dem Login kopieren
  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)
         }
     }
    }
    Nach dem Login kopieren

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
})
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage