Maison  >  Article  >  développement back-end  >  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\" ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 11:17:02419parcourir

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

Marshalling de cartes en 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 manière 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 :

<code class="golang">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()
}</code>

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.

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