Wie entmarshaliere ich XML-Elemente mit Attributen und Gleitkommawerten in Go?

DDD
Freigeben: 2024-10-23 18:38:02
Original
822 Leute haben es durchsucht

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

Unmarshalling von XML-Elementen mit Attributen und Gleitkommawerten in Go

So entmarshallen Sie ein XML-Element wie das bereitgestellte mit einem Attribut und Als Gleitkommawert müssen wir eine Go-Struktur definieren, die der XML-Struktur entspricht.

Struktur definieren

Betrachten wir die beiden in der angegebenen Strukturdefinitionen Frage:

Erste Definition:

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

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

Zweite Definition:

<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

Adressierung der Optionen :

  • XMLName-Eigenschaft: Die XMLName-Eigenschaft sollte im Allgemeinen verwendet werden, um den XML-Elementnamen für die Struktur anzugeben, daher benötigen wir sie in diesem Fall nicht Der Elementname wird explizit in der Annotation xml:"thing" angegeben.
  • Float-Wert-Darstellung: Das Float-Feld in der ersten Struktur kann aufgrund der Gleitkommawerte nicht korrekt unmarshaled werden im XML enthalten Leerzeichen. Wir müssen diese Leerzeichen vor dem Unmarshaling entfernen.
  • Wrapper oder direkte Einbettung: Die zweite Strukturdefinition verwendet einen Wrapper (ThingWrapper), um das XML-Element darzustellen. Dies ist nicht erforderlich, da die Struktur ThingElem die XML-Struktur bereits genau darstellt.

Endgültige Lösung:

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

type Root struct {
    Things []Thing `xml:"thing"`
}</code>
Nach dem Login kopieren

In dieser Lösung stellt die Thing-Struktur dar ein einzelnes XML-Element, und die Root-Struktur ist ein Container, der einen Teil der Thing-Strukturen zum Unmarshaling des XML-Root-Elements enthält.

Beispielcode:

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

Dieser Code zeigt, wie das XML-Element in eine Go-Struktur entmarshaliert wird, einschließlich der Entfernung von Leerzeichen aus den Gleitkommawerten.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich XML-Elemente mit Attributen und Gleitkommawerten in Go?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!