"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como empacotar mapas para XML no Go: O que fazer quando você obtém o erro "xml: tipo não suportado: map[string]int\"?

Como empacotar mapas para XML no Go: O que fazer quando você obtém o erro "xml: tipo não suportado: map[string]int\"?

Publicado em 2024-11-08
Navegar:952

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

Marshalling Maps to XML in Go

Ao tentar converter um mapa em dados XML, os desenvolvedores podem encontrar um erro informando "xml: tipo não suportado: mapa[string] interno." Embora o empacotamento de mapas seja possível para JSON, ele não é compatível com XML por padrão.

Uma solução para esse problema é utilizar a interface xml.Marshaler. Ao criar um tipo StringMap personalizado e implementar MarshalXML, você pode controlar como o mapa é serializado em XML. Isso permite que você especifique a estrutura desejada e os nomes dos elementos.

Aqui está um exemplo de implementação de MarshalXML para um 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()
}

Depois de implementar o MarshalXML, você pode simplesmente chamar xml.MarshalIndent em seus dados para gerar a saída XML desejada.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3