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.
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