Adakah Saya Perlu Menggunakan XMLName untuk Menyahmarshaling Elemen XML dengan Atribut dan Nilai Titik Terapung?

Barbara Streisand
Lepaskan: 2024-10-23 22:52:02
asal
728 orang telah melayarinya

Do I Need to Use XMLName for Unmarshaling XML Elements with Attributes and Floating Point Values?

Menyahmarshal Elemen XML dengan Atribut dan Nilai Titik Terapung

Untuk menyahmarshal elemen XML dengan atribut dan nilai titik terapung, anda boleh menentukan a Go struct dengan medan yang sepadan. Walau bagaimanapun, terdapat beberapa pertimbangan berkenaan penggunaan sifat xml.Name.

Dalam elemen XML yang disediakan:

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

Struktur ThingElem harus mempunyai sifat berikut:

  • Prop: Medan ini sepadan dengan prop atribut dan jenisnya ialah int.
  • Nilai: Medan ini sepadan dengan nilai titik terapung 1.23.

Pilihan 1: Dengan XMLName

Dalam pilihan ini, anda boleh menambah medan xml.Name pada struct ThingElem. Medan ini biasanya digunakan apabila struktur XML tidak jelas. Dalam kes ini, ia tidak perlu kerana jelas bahawa struct sepadan dengan elemen perkara.

<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

Pilihan 2: Tanpa Nama XML

Memandangkan tiada kesamaran dalam struktur XML, anda boleh meninggalkan medan xml.Name.

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

Menyahmarshaling Nilai Titik Terapung

Untuk menyahmarshal nilai titik terapung dengan betul, anda perlu pastikan tiada ruang dalam XML. Dalam contoh anda, nilainya ialah 1.23, tetapi disyorkan untuk mengalih keluar ruang dan menyimpannya sebagai 1.23.

Menyahmarshaling Data Bersarang

Anda juga boleh menyahmarshal data bersarang dengan mentakrifkan struktur pembalut. Sebagai contoh, XML mengandungi pelbagai elemen perkara. Untuk menyahmarshal mereka, anda akan mentakrifkan struct ThingWrapper:

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

Contoh Kod Lengkap

Berikut ialah contoh kod lengkap yang menyahmarshal data XML yang disediakan:

<code class="go">package main

import (
    "encoding/xml"
    "fmt"
)

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(data), thing)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(thing)
}</code>
Salin selepas log masuk

Kod ini akan mencetak data XML yang dihuraikan, termasuk atribut prop dan nilai titik terapung.

Atas ialah kandungan terperinci Adakah Saya Perlu Menggunakan XMLName untuk Menyahmarshaling Elemen XML dengan Atribut dan Nilai Titik Terapung?. 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!