Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich XML mit Attributen und Werten in Go?

Wie entmarshaliere ich XML mit Attributen und Werten in Go?

Linda Hamilton
Freigeben: 2024-10-24 00:37:02
Original
390 Leute haben es durchsucht

How to Unmarshal XML with Attributes and Values in Go?

Unmarshaling von XML-Elementen mit Attributen und Werten in Go

XML-Elemente enthalten häufig sowohl Attribute als auch Werte. Um solche Elemente erfolgreich in Golang-Strukturen zu entpacken, ist es wichtig, die Rolle der XMLName- und „,chardata“-Annotationen zu verstehen.

Struktur ohne XMLName definieren

Berücksichtigen Sie Folgendes bereitgestelltes XML:

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

Die entsprechende Struktur ohne XMLName-Feld könnte sein:

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

Prop ist mit xml:"prop,attr" annotiert, um anzugeben, dass es ein Attribut von ist Dingelement. Der Wert wird mit xml:",chardata" annotiert, um anzugeben, dass er den Inhalt des Elements als Zeichenfolge enthalten soll.

Informationen zu XMLName

XMLName kann dazu verwendet werden Definieren Sie explizit den XML-Tag-Namen einer Struktur. In unserem Fall wird der XML-Tag-Name abgeleitet, da er mit dem Strukturnamen (ThingElem) übereinstimmt. Daher ist XMLName in diesem Szenario nicht erforderlich.

Verwenden einer Wrapper-Struktur

Wenn die XML-Struktur komplexer ist oder mehrdeutig sein könnte, können Sie eine Wrapper-Struktur verwenden um zusätzlichen Kontext bereitzustellen. Wenn das XML beispielsweise mehrere Thing-Elemente innerhalb eines Stammelements hätte:

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

Sie würden eine Wrapper-Struktur benötigen:

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

Hier ist T die eingebettete Struktur, die das darstellt thing-Element.

Überlegungen zum Unmarshaling

Für die bereitgestellten XML-Daten müssen Sie den Leerraum in den Elementwerten berücksichtigen. Da XML standardmäßig keine Leerzeichen beibehält, sollten die Werte gekürzt werden oder die Annotation xml:",innerxml" verwendet werden.

Die resultierende Struktur kann wie folgt entmarshallt werden:

<code class="go">package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

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(strings.TrimSpace(data)), thing)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(thing)
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich XML mit Attributen und Werten 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage