Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melintasi dan Memproses Data XML dalam Go tanpa Menggunakan XPath?

Bagaimanakah Saya Boleh Melintasi dan Memproses Data XML dalam Go tanpa Menggunakan XPath?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-30 15:40:10273semak imbas

How Can I Traverse and Process XML Data in Go without Using XPath?

Merentasi Data XML dalam Go tanpa Exact Xpath

Apabila menggunakan xml.UnMarshal untuk menyahkod XML ke dalam struct, seseorang mungkin menghadapi batasan dalam mengendalikan dinamik atau set data hierarki. Untuk menangani perkara ini, pertimbangkan untuk memanfaatkan mekanisme traversal tersuai untuk memproses nod dan keturunannya dengan cara yang fleksibel.

Pelaksanaan

  1. Tentukan Nod Rekursif Struktur:

    type Node struct {
     XMLName xml.Name
     Content []byte `xml:",innerxml"`
     Nodes   []Node `xml:",any"`
    }
  2. Buat Fungsi Berjalan untuk Rekursif Traversal:

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

Ini fungsi secara rekursif melintasi sekeping nod, memanggil fungsi yang disediakan f dengan setiap yang ditemui nod.

  1. Nod Lintas dan Proses:

Dengan menggabungkan komponen di atas, anda boleh melintasi data XML dan memproses nod seperti berikut:

// Create a slice of nodes from your XML data
nodes := []Node{}

// Recursively walk the nodes
walk(nodes, func(n Node) bool {
    // Process the node here (e.g., check type, access attributes)
    return true
})

Contoh dengan Atribut

Untuk memasukkan atribut dalam traversal, ubah suai struktur Nod dan kaedah UnmarshalXMLnya:

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

Kesimpulan

Menggunakan ini pendekatan traversal rekursif, anda boleh melintasi dan memproses data XML dengan cekap tanpa bergantung pada Xpaths tertentu. Ini memberikan fleksibiliti yang lebih besar, membolehkan anda mengendalikan struktur XML dinamik atau berubah-ubah dengan mudah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melintasi dan Memproses Data XML dalam Go 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