Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Saya Perlu Menggunakan XMLName untuk Menyahmarshaling Elemen XML dengan Atribut dan Nilai Titik Terapung?

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

Barbara Streisand
Barbara Streisandasal
2024-10-23 22:52:02729semak imbas

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>

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>

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>

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>

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>

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!

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