Maison >développement back-end >Golang >Comment puis-je désassembler efficacement du XML directement dans une chaîne Go Map[string] ?
Lorsque vous traitez de grands ensembles de données XML, le double processus de conversion consistant à décomposer en une structure puis en une carte peut prendre beaucoup de temps. . Cet article explore une approche plus efficace pour désassembler directement du XML dans une carte.
Problème :
L'objectif est de convertir le XML suivant en une chaîne map[string] , où les paires clé-valeur sont extraites des éléments enfants :
<classAccesses> <apexClass>AccountRelationUtility</apexClass> <enabled>true</enabled> </classAccesses>
Pour y parvenir, une structure de données personnalisée qui implémente le L'interface xml.Unmarshaller est requise.
Solution :
type classAccessesMap struct { m map[string]string } func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { c.m = map[string]string{} key := "" val := "" for { t, _ := d.Token() switch tt := t.(type) { // TODO: parse the inner structure case xml.StartElement: fmt.Println(">", tt) case xml.EndElement: fmt.Println("<", tt) if tt.Name == start.Name { return nil } if tt.Name.Local == "enabled" { c.m[key] = val } } } }
En implémentant l'interface xml.Unmarshaller, la structure de données personnalisée peut directement désassembler le XML dans une carte [chaîne]chaîne. Cela élimine le besoin de conversion de structure intermédiaire, ce qui se traduit par un processus de démarshaling plus efficace.
Solution partielle et démonstration :
Une solution partielle démontrant l'approche est disponible sur https://play.golang.org/p/7aOQ5mcH6zQ. Cette solution comprend la structure de données personnalisée et un exemple de XML pour démontrer le processus de démarshalisation.
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!