Bagaimana untuk Menyahmarshal XML dengan Atribut dan Nilai dalam Go?

Linda Hamilton
Lepaskan: 2024-10-24 00:37:02
asal
290 orang telah melayarinya

How to Unmarshal XML with Attributes and Values in Go?

Menyahmarshaling Elemen XML dengan Atribut dan Nilai dalam Go

Elemen XML selalunya mengandungi kedua-dua atribut dan nilai. Untuk berjaya menyusun elemen sedemikian ke dalam struktur Golang, adalah penting untuk memahami peranan XMLName dan anotasi ",chardata".

Mentakrifkan Struktur tanpa XMLName

Pertimbangkan XML yang disediakan:

<code class="xml"><thing prop="1">
  1.23
</thing>
<thing prop="2">
  4.56
</thing></code>
Salin selepas log masuk

Struktur yang sepadan tanpa medan XMLName boleh menjadi:

<code class="go">type ThingElem struct {
    Prop  int   `xml:"prop,attr"`
    Value float64 `xml:",chardata"`
}</code>
Salin selepas log masuk

Prop dianotasi dengan xml:"prop,attr" untuk menunjukkan bahawa ia adalah atribut bagi unsur benda. Nilai dianotasi dengan xml:",chardata" untuk menentukan bahawa ia harus menyimpan kandungan elemen sebagai rentetan.

Memahami XMLName

XMLName boleh digunakan untuk mentakrifkan secara eksplisit nama tag XML sesuatu struct. Dalam kes kami, nama teg XML disimpulkan kerana ia sepadan dengan nama struct (ThingElem). Jadi, XMLName tidak diperlukan dalam senario ini.

Menggunakan Struktur Pembungkus

Jika struktur XML lebih kompleks atau mungkin samar-samar, anda boleh menggunakan struktur pembalut untuk menyediakan konteks tambahan. Sebagai contoh, jika XML mempunyai berbilang elemen perkara dalam elemen akar:

<code class="xml"><root>
  <thing prop="1">
    1.23
  </thing>
  <thing prop="2">
    4.56
  </thing>
</root></code>
Salin selepas log masuk

Anda memerlukan struktur pembalut:

<code class="go">type ThingWrapper struct {
    T ThingElem `xml:"thing"`
}</code>
Salin selepas log masuk

Di sini, T ialah struct terbenam yang mewakili elemen benda.

Membuang Pertimbangan

Untuk data XML yang disediakan, anda perlu mengambil kira ruang putih dalam nilai elemen. Memandangkan XML tidak mengekalkan ruang putih secara lalai, nilai hendaklah dipangkas atau anotasi xml:",innerxml" boleh digunakan.

Struktur yang terhasil boleh dinyahmarshall seperti berikut:

<code class="go">package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

type Root struct {
    Things []Thing `xml:"thing"`
}

type Thing struct {
    Prop  int     `xml:"prop,attr"`
    Value float64 `xml:",chardata"`
}

func main() {
    data := `
<root>
<thing prop="1"> 1.23 </thing>
<thing prop="2"> 4.56 </thing>
</root>
`
    thing := &Root{}
    err := xml.Unmarshal([]byte(strings.TrimSpace(data)), thing)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(thing)
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal XML dengan Atribut dan Nilai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!