Golang : Unmarshalling XML avec des attributs dynamiques
Introduction :
Dans Go, encoding/xml fournit un moyen efficace et polyvalent de gérer les données XML. Cependant, lorsqu'il s'agit d'éléments XML possédant des attributs dynamiques, la désorganisation devient difficile en raison du nombre inconnu et des types d'attributs présents.
Question :
Comment pouvez-vous désorganiser les balises XML avec attributs dynamiques dans Go lorsque vous n'anticipez pas les attributs exacts qui seront rencontrés ?
Réponse :
Avant ou tard 2017, cela n'était pas directement pris en charge dans le démarchage XML de Go. Cependant, grâce aux progrès du package encoding/xml, cette fonctionnalité a été implémentée.
Pour désorganiser les balises XML avec des attributs dynamiques, vous pouvez utiliser la syntaxe suivante :
type MyStruct struct { Attributes []xml.Attr `xml:",any,attr"` }
Voici un exemple pour illustrer son fonctionnement :
package main import ( "encoding/xml" "fmt" ) func main() { type MyStruct struct { Attributes []xml.Attr `xml:",any,attr"` } data := `` var v MyStruct if err := xml.Unmarshal([]byte(data), &v); err != nil { panic(err) } fmt.Println(v.Attributes) }
Dans cet exemple, le type MyStruct définit un champ nommé Attributs. La balise xml:"...,any,attr" demande au programme de désagrégation d'attribuer tous les attributs XML à ce champ sous forme de tranches xml.Attr.
Lorsque le programme de désagrégation rencontre les données XML fournies dans la variable de données, il réussit à désorganiser les attributs inconnus (ATTR1 et ATTR2) dans le champ Attributs de la structure v. Cela permet une gestion dynamique des éléments XML avec différents ensembles d'attributs.
Notez que cette fonctionnalité nécessite Go version 1.9 ou ultérieure.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3