Heim > Backend-Entwicklung > Golang > Wie kann man XML-Daten in Golang effizient durchlaufen?

Wie kann man XML-Daten in Golang effizient durchlaufen?

DDD
Freigeben: 2024-11-29 12:23:13
Original
856 Leute haben es durchsucht

How to Efficiently Traverse XML Data in Golang?

XML-Daten in Golang durchqueren

Um XML-Daten in Golang zu durchqueren, kann man einen Vanilla-Codierungs-/XML-Ansatz verwenden, indem man eine rekursive Struktur erstellt und eine Walk-Funktion verwendet .

Strukturdefinition und Walk-Funktion

type Node struct {
    XMLName xml.Name
    Content []byte `xml:",innerxml"`
    Nodes   []Node `xml:",any"`
}

func walk(nodes []Node, f func(Node) bool) {
    for _, n := range nodes {
        if f(n) {
            walk(n.Nodes, f)
        }
    }
}
Nach dem Login kopieren

Beispiel Verwendung

Berücksichtigen Sie das folgende XML:

<content>
    <p>this is content area</p>
    <animal>
        <p>This id dog</p>
        <dog>
           <p>tommy</p>
        </dog>
    </animal>
    <birds>
        <p>this is birds</p>
        <p>this is birds</p>
    </birds>
    <animal>
        <p>this is animals</p>
    </animal>
</content>
Nach dem Login kopieren

Um das XML zu durchlaufen und jeden Knoten und seine untergeordneten Knoten zu verarbeiten:

  1. Entpacken Sie das XML in einen struct:

    var content Node
    if err := xml.Unmarshal(xmlData, &content); err != nil {
     // handle error
    }
    Nach dem Login kopieren
  2. Gehen Sie mit dem Walk durch die Struktur Funktion:

    walk(content.Nodes, func(n Node) bool {
     // Process the node or traverse its child nodes here
     fmt.Printf("Node: %s\n", n.XMLName.Local)
     return true
    })
    Nach dem Login kopieren

Erweiterte Version mit Attributen

Für Knoten mit Attributen gibt es hier eine erweiterte Version:

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

Dies ermöglicht den Zugriff auf Attribute innerhalb der Knotenverarbeitungslogik.

Das obige ist der detaillierte Inhalt vonWie kann man XML-Daten in Golang effizient durchlaufen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage