"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo agrupar mapas en XML en Go: ¿Qué hacer cuando aparece el error \"xml: tipo no admitido: map[string]int\"?

Cómo agrupar mapas en XML en Go: ¿Qué hacer cuando aparece el error \"xml: tipo no admitido: map[string]int\"?

Publicado el 2024-11-08
Navegar:255

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

Configuración de mapas a XML en Go

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.

Último tutorial Más>

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