Maison > développement back-end > Golang > Comment puis-je désassembler efficacement du XML directement dans une chaîne Go Map[string] ?

Comment puis-je désassembler efficacement du XML directement dans une chaîne Go Map[string] ?

Susan Sarandon
Libérer: 2024-12-05 03:15:11
original
202 Les gens l'ont consulté

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

Désassembler XML directement dans une carte

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

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

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!

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