"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment marshaler des cartes vers XML dans Go : que faire lorsque vous obtenez l'erreur \"xml : type non pris en charge : map[string]int\" ?

Comment marshaler des cartes vers XML dans Go : que faire lorsque vous obtenez l'erreur \"xml : type non pris en charge : map[string]int\" ?

Publié le 2024-11-08
Parcourir:763

How to Marshal Maps to XML in Go: What to Do When You Get the \

Marshalling de cartes vers XML dans Go

Lors de la tentative de conversion d'une carte en données XML, les développeurs peuvent rencontrer une erreur indiquant "xml : type non pris en charge : map[string] int." Même si le marshalling de cartes est possible pour JSON, il n'est pas pris en charge par défaut pour XML.

Une solution à ce problème consiste à utiliser l'interface xml.Marshaler. En créant un type StringMap personnalisé et en implémentant MarshalXML, vous pouvez contrôler la façon dont la carte est sérialisée en XML. Cela vous permet de spécifier la structure souhaitée et les noms d'éléments.

Voici un exemple d'implémentation de MarshalXML pour un StringMap :

func (s StringMap) MarshalXML(e *xml.Encoder, start xml.StartElement) error {

    tokens := []xml.Token{start}

    for key, value := range s {
        t := xml.StartElement{Name: xml.Name{"", key}}
        tokens = append(tokens, t, xml.CharData(value), xml.EndElement{t.Name})
    }

    tokens = append(tokens, xml.EndElement{start.Name})

    for _, t := range tokens {
        err := e.EncodeToken(t)
        if err != nil {
            return err
        }
    }

    // flush to ensure tokens are written
    return e.Flush()
}

Une fois que vous avez implémenté MarshalXML, vous pouvez simplement appeler xml.MarshalIndent sur vos données pour générer la sortie XML souhaitée.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3