Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menghapuskan Elemen XML dengan Atribut dan Nilai Titik Terapung dalam Go?

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

DDD
DDDasal
2024-10-23 18:38:02823semak imbas

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>

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>

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>

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>

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!

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