Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Melintasi Data XML dengan Cekap Tanpa Menggunakan XPath?

Bagaimanakah Saya Boleh Melintasi Data XML dengan Cekap Tanpa Menggunakan XPath?

Barbara Streisand
Lepaskan: 2024-11-29 06:57:10
asal
462 orang telah melayarinya

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

Perjalanan Data XML dalam Go

Masalah:

Data XML sering memberikan cabaran apabila ia datang untuk mengakses elemen tertentu tanpa pengetahuan awal tentang XPath mereka. Kaedah xml.Unmarshal mempunyai had dalam hal ini, yang memerlukan pengguna untuk menentukan laluan tepat untuk mendapatkan data.

Penyelesaian:

Untuk melintasi data XML secara fleksibel, kami boleh gunakan struktur data rekursif di samping fungsi berjalan mudah.

Data Rekursif Struktur:

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

Dalam struktur ini, setiap Nod mewakili elemen dalam dokumen XML, yang mengandungi namanya, kandungan XML dalaman (untuk elemen tidak bersarang) dan sepotong nod kanak-kanak.

Fungsi Berjalan:

func walk(nodes []Node, f func(Node) bool) {
    for _, n := range nodes {
        if f(n) {
            walk(n.Nodes, f)
        }
    }
}
Salin selepas log masuk

Fungsi berjalan secara rekursif melintasi pepohon Nod, memanggil fungsi yang disediakan f untuk setiap nod yang ditemui.

Penggunaan:

Untuk melintasi dokumen XML dan memproses elemennya dengan sewajarnya:

  1. Nyahmarshal data XML ke dalam struktur Nod.
  2. Tentukan fungsi penapis f yang menentukan kriteria untuk memproses nod (cth., berdasarkan nama elemen atau kandungan).
  3. Panggil fungsi berjalan dengan nod akar dan fungsi penapis sebagai parameter.

Contoh:

Kod berikut merentasi dokumen XML dalam soalan, mencetak nama elemen dalam pesanan:

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

Output:

content
p
animal
p
dog
p
birds
p
p
animal
p
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melintasi Data XML dengan Cekap Tanpa Menggunakan XPath?. 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