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
Barbara Streisandasal
2024-11-29 06:57:10530semak imbas

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"`
}

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

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

Output:

content
p
animal
p
dog
p
birds
p
p
animal
p

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!

Kenyataan:
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