Heim >Backend-Entwicklung >Golang >Wie kann ich XML-Strukturen in Golang effizient crawlen und verarbeiten?

Wie kann ich XML-Strukturen in Golang effizient crawlen und verarbeiten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-11 20:49:15362Durchsuche

How Can I Efficiently Crawl and Process XML Structures in Golang?

Crawling durch XML-Strukturen in Golang

In der Welt des XML-Parsings bietet die xml.Unmarshal-Methode einen strukturierten Ansatz zum Konvertieren von XML-Daten in Go-Strukturen. Allerdings stellen die Einschränkungen eine Herausforderung dar, wenn Sie dynamisch durch das gesamte Dokument navigieren möchten.

Stellen Sie sich eine XML-Struktur wie diese vor:

<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 diese Struktur sequenziell zu navigieren, benötigen Sie eine Methode dazu :

  • Jeden Knoten und seine untergeordneten Knoten verarbeiten
  • An Änderungen im Element anpassen order

Vanilla-Lösung mit Rekursion

Um dies zu erreichen, können Sie die Leistungsfähigkeit von Vanilla Encoding/XML mit einer rekursiven Struktur und einer einfachen Walk-Funktion nutzen:

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

Dieser Ansatz ermöglicht es Ihnen, das gesamte Dokument zu durchlaufen und jeden Knoten als zu behandeln benötigt.

Erweiterte Lösung mit Attributen

Wenn Sie Zugriff auf Attribute benötigen, finden Sie hier eine aktualisierte 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), &amp;start)
}

Vorteile von Dieser Ansatz:

  • Er bietet unabhängig davon Flexibilität bei der Navigation durch XML-Strukturen ihrer Komplexität oder Reihenfolge.
  • Es vereinfacht den Prozess der Handhabung verschachtelter Knoten.
  • Es ermöglicht Ihnen, Knoten und ihre Attribute auf strukturierte Weise zu verarbeiten.

Das obige ist der detaillierte Inhalt vonWie kann ich XML-Strukturen in Golang effizient crawlen und verarbeiten?. 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