Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshal Atribut XML dengan Atribut Tidak Diketahui dalam Go?

Bagaimana untuk Menyahmarshal Atribut XML dengan Atribut Tidak Diketahui dalam Go?

DDD
DDDasal
2024-11-25 02:30:10153semak imbas

How to Unmarshal XML Attributes with Unknown Attributes in Go?

Menyahmarshal Atribut XML dengan Atribut Tidak Diketahui dalam Go

Dalam Go, pakej pengekodan/xml membolehkan kami mengawal dan menyahmarshal data XML ke dalam dan daripada struktur data Go. Walau bagaimanapun, secara lalai, ia hanya menyokong teg XML unmarshalling dengan atribut tetap yang diketahui sebelum ini.

Atribut Dinamik dalam XML

Dalam sesetengah kes, dokumen XML mungkin mempunyai teg dengan atribut dinamik yang tidak diketahui terlebih dahulu. Ini boleh menimbulkan cabaran apabila menyahmarshaling data XML sedemikian ke dalam struct Go.

Menyahmarshaling Atribut Dinamik

Sehingga akhir 2017, Go menyokong unmarshalling teg XML dengan atribut dinamik menggunakan xml:",any,attr" arahan teg. Arahan ini mengarahkan unmarshaler untuk mengumpulkan semua atribut ke dalam kepingan xml.Attr.

Contoh:

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {
    var v struct {
        Attributes []xml.Attr `xml:",any,attr"`
    }

    data := `<TAG ATTR1="VALUE1" ATTR2="VALUE2" />`

    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        panic(err)
    }
    fmt.Println(v)
}

Apabila kod di atas dilaksanakan, ia akan print:

{
  Attributes: [
    {Name:ATTR1 Value:VALUE1}
    {Name:ATTR2 Value:VALUE2}
  ]
}

Nota:

Arahan xml:",any,attr" tidak mengumpul atribut daripada teg bersarang. Jika anda perlu mengumpul atribut daripada teg bersarang, anda perlu membuat penyahkod XML tersuai.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Atribut XML dengan Atribut Tidak Diketahui dalam Go?. 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