Heim > Backend-Entwicklung > Golang > Wie kann ich XML-Daten in Go effizient durchlaufen, ohne XPath zu verwenden?

Wie kann ich XML-Daten in Go effizient durchlaufen, ohne XPath zu verwenden?

Barbara Streisand
Freigeben: 2024-11-29 06:57:10
Original
463 Leute haben es durchsucht

How Can I Efficiently Traverse XML Data in Go Without Using XPath?

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

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

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:

  1. Entpacken Sie die XML-Daten in eine Knotenstruktur.
  2. Definieren Sie eine Filterfunktion f, die die Kriterien für die Verarbeitung angibt Knoten (z. B. basierend auf Elementname oder Inhalt).
  3. Rufen Sie die Walk-Funktion mit dem Wurzelknoten und der Filterfunktion als Parameter auf.

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

Ausgabe:

content
p
animal
p
dog
p
birds
p
p
animal
p
Nach dem Login kopieren

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!

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