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

Wie entmarshaliere ich XML mit Attributen und Werten in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 00:37:02277Durchsuche

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>

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>

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>

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

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

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>

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!

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