Désassembler des données XML dans une structure intermédiaire qui est ensuite convertie en une carte peut prendre beaucoup de temps pour les grands ensembles de données. Dans de tels cas, la désorganisation directe dans une carte est une approche plus efficace.
Pour désorganiser le XML directement dans une carte, vous pouvez créer un type personnalisé qui implémente l'interface xml.Unmarshaler. Ce type gérera le processus de démarshalage et stockera les données dans une chaîne map[string].
Exemple :
type classAccessesMap struct { m map[string]string } // UnmarshalXML implements the xml.Unmarshaler interface to unmarshal XML directly into the map. func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { c.m = map[string]string{} key := "" val := "" // Iteratively parse XML tokens. for { t, _ := d.Token() switch tt := t.(type) { // TODO: Handle the inner structure parsing here. case xml.StartElement: key = tt.Name.Local case xml.EndElement: // Store the key-value pair in the map when the end of the "enabled" element is reached. if tt.Name.Local == "enabled" { c.m[key] = val } // Return nil when the end of the "classAccesses" element is reached. if tt.Name == start.Name { return nil } } } }
Utilisation :
// Unmarshal the XML into the custom classAccessesMap type. var classAccessesMap classAccessesMap if err := xml.Unmarshal([]byte(xmlData), &classAccessesMap); err != nil { // Handle error } fmt.Println(classAccessesMap.m) // Prints the map containing the parsed data.
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!