Heim > Backend-Entwicklung > Golang > Muss ich XMLName zum Unmarshaling von XML-Elementen mit Attributen und Gleitkommawerten verwenden?

Muss ich XMLName zum Unmarshaling von XML-Elementen mit Attributen und Gleitkommawerten verwenden?

Barbara Streisand
Freigeben: 2024-10-23 22:52:02
Original
809 Leute haben es durchsucht

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

Unmarshaling von XML-Elementen mit Attributen und Gleitkommawerten

Um ein XML-Element mit einem Attribut und einem Gleitkommawert zu entmarshalieren, können Sie definieren eine Go-Struktur mit den entsprechenden Feldern. Es gibt jedoch einige Überlegungen zur Verwendung der xml.Name-Eigenschaft.

Im bereitgestellten XML-Element:

<code class="xml"><thing prop="1">
  1.23
</thing></code>
Nach dem Login kopieren

Die ThingElem-Struktur sollte die folgenden Eigenschaften haben:

  • Prop: Dieses Feld entspricht dem Attribut prop und sein Typ ist int.
  • Wert: Dieses Feld entspricht dem Gleitkommawert 1,23.

Option 1: Mit XMLName

In dieser Option können Sie der ThingElem-Struktur ein xml.Name-Feld hinzufügen. Dieses Feld wird normalerweise verwendet, wenn die XML-Struktur nicht eindeutig ist. In diesem Fall ist dies nicht erforderlich, da klar ist, dass die Struktur dem Thing-Element entspricht.

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

Option 2: Ohne XMLName

Da es keine Mehrdeutigkeit gibt In der XML-Struktur können Sie das Feld xml.Name weglassen.

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

Gleitkommawerte entmarshalieren

Um den Gleitkommawert korrekt zu entmarshalieren, müssen Sie dies tun Stellen Sie sicher, dass das XML keine Leerzeichen enthält. In Ihrem Beispiel ist der Wert 1,23, es wird jedoch empfohlen, die Leerzeichen zu entfernen und ihn als 1,23 zu speichern.

Verschachtelte Daten entmarshalieren

Sie können verschachtelte Daten auch entmarshalieren Definieren einer Wrapper-Struktur. Beispielsweise enthält das XML mehrere Thing-Elemente. Um sie zu entmarshalieren, würden Sie eine ThingWrapper-Struktur definieren:

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

Vollständiges Codebeispiel

Hier ist ein vollständiges Codebeispiel, das die bereitgestellten XML-Daten entmarshallt:

<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>
Nach dem Login kopieren

Dieser Code gibt die analysierten XML-Daten aus, einschließlich des Prop-Attributs und der Gleitkommawerte.

Das obige ist der detaillierte Inhalt vonMuss ich XMLName zum Unmarshaling von XML-Elementen mit Attributen und Gleitkommawerten verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage