Unmarshal XML Array in Go: Nur das erste Element abrufen
XML, ein in Unternehmensumgebungen weit verbreitetes Datenformat, wird häufig in komplexen Darstellungen dargestellt , verschachtelte Strukturen. Go, eine vielseitige Programmiersprache, bietet robuste XML-Unmarshaling-Funktionen. Es kann jedoch von entscheidender Bedeutung sein, die Nuancen des Unmarshaling von XML-Arrays zu verstehen.
In einem bestimmten Szenario ist ein Entwickler beim Unmarshaling eines XML-Arrays auf ein Problem gestoßen. Der Code hat das erste Element erfolgreich entmarshallt, aber das gesamte Array konnte nicht abgerufen werden.
Das Problem:
type HostSystemIdentificationInfo []struct { IdentiferValue string `xml:"identifierValue"` IdentiferType struct { Label string `xml:"label"` Summary string `xml:"summary"` Key string `xml:"key"` } `xml:"identifierType"` } func main() { var t HostSystemIdentificationInfo err := xml.Unmarshal([]byte(vv), &t) if err != nil { log.Fatal(err) } fmt.Println(t) } const vv = ` <HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo"> <identifierValue>unknown</identifierValue> <identifierType> <label>Asset Tag</label> <summary>Asset tag of the system</summary> <key>AssetTag</key> </identifierType> </HostSystemIdentificationInfo> `
Die erwartete Ausgabe:
[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
Die tatsächliche Ausgabe:
[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
Lösung:
Das Problem entsteht aufgrund eines Missverständnisses über die XML-Unmarshaling-Prozess. Beim Unmarshaling eines XML-Arrays können Sie nicht einfach die Zielstruktur als Zeiger zum Empfang der Daten angeben. Stattdessen müssen Sie einen xml.Decoder erstellen und seine Decode-Methode wiederholt aufrufen.
package main import ( "bytes" "encoding/xml" "fmt" "io" "log" ) type HostSystemIdentificationInfo struct { IdentiferValue string `xml:"identifierValue"` IdentiferType struct { Label string `xml:"label"` Summary string `xml:"summary"` Key string `xml:"key"` } `xml:"identifierType"` } func main() { d := xml.NewDecoder(bytes.NewBufferString(vv)) for { var t HostSystemIdentificationInfo err := d.Decode(&t) if err == io.EOF { break } if err != nil { log.Fatal(err) } fmt.Println(t) } } const vv = ` <HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo"> <identifierValue>unknown</identifierValue> <identifierType> <label>Asset Tag</label> <summary>Asset tag of the system</summary> <key>AssetTag</key> </identifierType> </HostSystemIdentificationInfo> `
Durch die Verwendung des xml.Decoder können Sie jedes Element im XML-Array korrekt durchlaufen und einzeln entmarshalieren.
Durch die Befolgung dieser Schritte können Entwickler XML-Arrays in Go effektiv entmarshalieren und so komplexe Datenstrukturen effizient analysieren.
Das obige ist der detaillierte Inhalt vonWie vermeide ich das Unmarshaling nur des ersten Elements eines XML-Arrays in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!