Bagaimana untuk Menghapuskan Elemen XML dengan Atribut dan Nilai Titik Terapung dalam Go?

DDD
Lepaskan: 2024-10-23 18:38:02
asal
822 orang telah melayarinya

How to Unmarshal XML Elements with Attributes and Floating-Point Values in Go?

Menghapuskan Elemen XML dengan Atribut dan Nilai Titik Terapung dalam Go

Untuk menyahmarshal elemen XML seperti yang disediakan, dengan atribut dan nilai titik terapung, kita perlu mentakrifkan struct Go yang sepadan dengan struktur XML.

Mentakrifkan Struct

Mari kita pertimbangkan dua definisi struct yang diberikan dalam soalan:

Takrifan Pertama:

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

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

Takrifan Kedua:

<code class="go">type ThingElem struct {
    XMLName xml.Name `xml:"thing"` // Do I even need this?
    Prop    int      `xml:"prop,attr"`
    Value   float    // ???
}</code>
Salin selepas log masuk

Mengatasi Pilihan :

  • XMLName Property: Sifat XMLName biasanya digunakan untuk menentukan nama elemen XML untuk struct, jadi kami tidak memerlukannya dalam kes ini kerana nama elemen dinyatakan secara eksplisit dalam anotasi xml:"thing".
  • Perwakilan Nilai Terapung: Medan apungan dalam struct pertama tidak boleh dinyahmarshaled dengan betul kerana nilai titik terapung dalam XML mengandungi ruang. Kita perlu mengalih keluar ruang ini sebelum menyahmarshall.
  • Wrapper atau Direct Embedding: Definisi struct kedua menggunakan wrapper (ThingWrapper) untuk mewakili elemen XML. Ini tidak perlu kerana struct ThingElem sudah tepat mewakili struktur XML.

Penyelesaian Akhir:

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

type Root struct {
    Things []Thing `xml:"thing"`
}</code>
Salin selepas log masuk

Dalam penyelesaian ini, struct Thing mewakili elemen XML tunggal dan struct Root ialah bekas yang menyimpan sekeping struct Thing untuk menyahmarshaling elemen akar XML.

Kod Contoh:

<code class="go">package main

import (
    "encoding/xml"
    "fmt"
)

const xmlData = `
<root>
<thing prop="1">1.23</thing>
<thing prop="2">4.56</thing>
</root>
`

func main() {
    root := &Root{}
    if err := xml.Unmarshal([]byte(xmlData), root); err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(root.Things)
}</code>
Salin selepas log masuk

Kod ini menunjukkan cara untuk menyahmarshal elemen XML ke dalam struktur Go, termasuk mengalih keluar ruang daripada nilai titik terapung.

Atas ialah kandungan terperinci Bagaimana untuk Menghapuskan Elemen XML dengan Atribut dan Nilai Titik Terapung 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
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!