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

Wie kann man XML-Daten in Golang effizient durchlaufen?

DDD
DDDOriginal
2024-11-29 12:23:13856Durchsuche

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)
        }
    }
}

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>

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
    }
  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
    })

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)
}

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!

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