Heim > Artikel > Backend-Entwicklung > Wie kann ich XML mit dynamischen Attributen in Go entmarshalieren?
In Go kann das Unmarshaling von XML mit dynamischen Attributen eine Herausforderung sein. Mit der jüngsten Lösung von Problem 3633 gibt es jedoch nun eine einfache und effiziente Möglichkeit, mit dieser Situation umzugehen.
Traditionell würden Sie beim Unmarshaling von XML in Go dies tun Definieren Sie eine Struktur mit bestimmten Feldern, die den erwarteten XML-Elementen entsprechen. Was passiert jedoch, wenn Sie auf XML-Tags mit Attributen stoßen, die Sie nicht vorhersagen können?
Die Lösung liegt in der Verwendung des „,any,attr“. "-Tag in Ihrer Go-Strukturdefinition. Dieses Tag weist den XML-Unmarshaler an, alle Attribute des angegebenen Elements in einem Slice von xml.Attr-Strukturen zu sammeln.
Betrachten Sie das folgende XML-Snippet:
<TAG ATTR1="VALUE1" ATTR2="VALUE2" />
Um dieses XML in eine Go-Struktur zu entpacken, können Sie den folgenden Code verwenden:
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 Sie diesen Code ausführen, wird die V-Struktur mit den folgenden Daten gefüllt:
{[]xml.Attr{ {Name: {Local: "ATTR1"}, Value: "VALUE1"}, {Name: {Local: "ATTR2"}, Value: "VALUE2"}, }}
Das Attributes-Slice enthält zwei xml.Attr-Strukturen, die jeweils eines der Attribute aus dem XML-Tag darstellen.
Das Tag „,any,attr“ bietet eine leistungsstarke und flexible Möglichkeit um XML-Tags mit dynamischen Attributen in Go zu entmarshalieren. Durch die Nutzung dieser Funktion können Sie problemlos mit unvorhersehbaren XML-Strukturen umgehen und die benötigten Daten in benutzerdefinierte Strukturen extrahieren.
Das obige ist der detaillierte Inhalt vonWie kann ich XML mit dynamischen Attributen in Go entmarshalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!