Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyahmarshal XML dengan Atribut dan Nilai dalam Go?

Bagaimana untuk Menyahmarshal XML dengan Atribut dan Nilai dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-10-24 00:37:02277semak imbas

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>

Struktur yang sepadan tanpa medan XMLName boleh menjadi:

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

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>

Anda memerlukan struktur pembalut:

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

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>

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!

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