Al intentar convertir un mapa a datos XML, los desarrolladores pueden encontrar un error que indica "xml: tipo no admitido: mapa[cadena] int." Aunque la clasificación de mapas es posible para JSON, no es compatible con XML de forma predeterminada.
Una solución a este problema es utilizar la interfaz xml.Marshaler. Al crear un tipo StringMap personalizado e implementar MarshalXML, puede controlar cómo se serializa el mapa en XML. Esto le permite especificar la estructura deseada y los nombres de los elementos.
Aquí hay un ejemplo de implementación de MarshalXML para 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()
}
Una vez que haya implementado MarshalXML, puede simplemente llamar a xml.MarshalIndent en sus datos para generar el resultado XML deseado.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3