Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entmarshaliere ich XML-Elemente mit Attributen und Gleitkommawerten in Go?

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

DDD
DDDOriginal
2024-10-23 18:38:02823Durchsuche

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>

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>

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>

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>

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!

Stellungnahme:
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