Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Merangkak dan Memproses Struktur XML dengan Cekap di Golang?

Bagaimanakah Saya Boleh Merangkak dan Memproses Struktur XML dengan Cekap di Golang?

Linda Hamilton
Lepaskan: 2024-12-11 20:49:15
asal
365 orang telah melayarinya

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

Merangkak Melalui Struktur XML di Golang

Dalam dunia penghuraian XML, kaedah xml.Unmarshal menyediakan pendekatan berstruktur untuk menukar data XML kepada struktur Go. Walau bagaimanapun, kekangannya memberikan cabaran apabila anda berusaha untuk menavigasi keseluruhan dokumen secara dinamik.

Pertimbangkan struktur XML seperti ini:

<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>
Salin selepas log masuk

Untuk menavigasi struktur ini secara berurutan, anda memerlukan kaedah untuk :

  • Proses setiap nod dan anak-anaknya
  • Menyesuaikan diri dengan perubahan dalam susunan elemen

Penyelesaian Vanila dengan Rekursi

Untuk mencapainya, anda boleh memanfaatkan kuasa pengekodan/xml vanila dengan struktur rekursif dan fungsi berjalan mudah :

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)
        }
    }
}
Salin selepas log masuk

Pendekatan ini membolehkan anda melintasi keseluruhan dokumen dan mengendalikan setiap nod sebagai diperlukan.

Penyelesaian Dipertingkat dengan Atribut

Jika anda memerlukan akses kepada atribut, berikut ialah versi yang dikemas kini:

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)
}
Salin selepas log masuk

Faedah Pendekatan ini:

  • Ia memberikan fleksibiliti dalam menavigasi struktur XML, tanpa mengira kerumitan atau susunannya.
  • Ia memudahkan proses pengendalian nod bersarang.
  • Ia membolehkan anda memproses nod dan atributnya secara berstruktur.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Merangkak dan Memproses Struktur XML dengan Cekap di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan