Heim >Backend-Entwicklung >Golang >Wie entmarshaliere ich XML-Attribute mit unbekannten Attributen in Go?

Wie entmarshaliere ich XML-Attribute mit unbekannten Attributen in Go?

DDD
DDDOriginal
2024-11-25 02:30:10207Durchsuche

How to Unmarshal XML Attributes with Unknown Attributes in Go?

Unmarshalling von XML-Attributen mit unbekannten Attributen in Go

In Go ermöglicht uns das Paket „encoding/xml“ das Marshallen und Unmarshalieren von XML-Daten in und aus Go-Datenstrukturen. Allerdings unterstützt es standardmäßig nur das Unmarshalling von XML-Tags mit festen Attributen, die im Voraus bekannt sind.

Dynamische Attribute in XML

In einigen Fällen können XML-Dokumente Tags haben mit dynamischen Attributen, die nicht im Voraus bekannt sind. Dies kann beim Unmarshalling solcher XML-Daten in Go-Strukturen eine Herausforderung darstellen.

Unmarshaling dynamischer Attribute

Seit Ende 2017 unterstützt Go das Unmarshalling von XML-Tags mit dynamischen Attributen mithilfe von xml:",any,attr"-Tag-Direktive. Diese Anweisung weist den Unmarshaler an, alle Attribute im xml.Attr-Slice zu sammeln.

Beispiel:

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {
    var v struct {
        Attributes []xml.Attr `xml:",any,attr"`
    }

    data := `<TAG ATTR1="VALUE1" ATTR2="VALUE2" />`

    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        panic(err)
    }
    fmt.Println(v)
}

Wenn der obige Code ausgeführt wird, wird Folgendes ausgegeben:

{
  Attributes: [
    {Name:ATTR1 Value:VALUE1}
    {Name:ATTR2 Value:VALUE2}
  ]
}

Hinweis:

Die Die Direktive xml:",any,attr" sammelt keine Attribute aus verschachtelten Tags. Wenn Sie Attribute aus verschachtelten Tags sammeln müssen, müssen Sie einen benutzerdefinierten XML-Decoder erstellen.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich XML-Attribute mit unbekannten Attributen 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