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
Susan Sarandonoriginal
2024-12-05 03:15:11189parcourir

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>

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!

Déclaration:
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