Maison > développement back-end > Golang > Comment puis-je désassembler efficacement du XML directement dans une Go Map ?

Comment puis-je désassembler efficacement du XML directement dans une Go Map ?

Barbara Streisand
Libérer: 2024-12-18 01:53:10
original
263 Les gens l'ont consulté

How Can I Efficiently Unmarshal XML Directly into a Go Map?

Désassembler du XML directement dans une carte

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
            }
        }
    }
}
Copier après la connexion

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.
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal