Maison > Article > développement back-end > Comment éviter de démarshaler uniquement le premier élément d'un tableau XML dans Go ?
Démarrer un tableau XML dans Go : obtenir uniquement le premier élément
XML, un format de données répandu dans les environnements d'entreprise, est souvent représenté sous forme complexe , structures imbriquées. Go, un langage de programmation polyvalent, offre de robustes capacités de démarshaling XML. Cependant, comprendre les nuances de la désorganisation des tableaux XML peut s'avérer crucial.
Dans un scénario particulier, un développeur a rencontré un problème lors de la désorganisation d'un tableau XML. Le code a réussi à désassembler le premier élément mais n'a pas réussi à récupérer l'intégralité du tableau.
Le problème :
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> `
Le résultat attendu :
[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
Le résultat réel :
[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
Solution :
Le problème survient en raison d'un malentendu sur le Processus de démarshaling XML. Lors du démarshaling d'un tableau XML, vous ne pouvez pas simplement fournir la structure cible comme pointeur pour recevoir les données. Au lieu de cela, vous devez créer un xml.Decoder et appeler à plusieurs reprises sa méthode Decode.
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> `
En utilisant xml.Decoder, vous pouvez parcourir correctement chaque élément du tableau XML et les désorganiser individuellement.
Par conséquent, en suivant ces étapes, les développeurs peuvent désassembler efficacement les tableaux XML dans Go, leur permettant d'analyser efficacement des structures de données complexes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!