Buscar..


Observaciones

Si bien muchos de los usos del paquete encoding/xml incluyen cálculo de referencias y desvinculación en una struct Go, vale la pena señalar que esto no es un mapeo directo. La documentación del paquete dice:

El mapeo entre elementos XML y estructuras de datos es inherentemente defectuoso: un elemento XML es una colección de valores anónimos dependiente de la orden, mientras que una estructura de datos es una colección de valores nombrados independiente de la orden.

Para pares simples, desordenados, clave-valor, el uso de una codificación diferente, como Gob's o JSON, puede ser un mejor ajuste. Para datos ordenados o flujos de datos basados ​​en eventos / devoluciones de llamadas, XML puede ser la mejor opción.

Descodificación / no básica de elementos anidados con datos.

Los elementos XML a menudo se anidan, tienen datos en atributos y / o como datos de caracteres. La forma de capturar estos datos es usando ,attr y ,chardata respectivamente, para esos casos.

var doc = `
<parent>
  <child1 attr1="attribute one"/>
  <child2>and some cdata</child2>
</parent>
`

type parent struct {
    Child1 child1 `xml:"child1"`
    Child2 child2 `xml:"child2"`
}

type child1 struct {
    Attr1 string `xml:"attr1,attr"`
}

type child2 struct {
    Cdata1 string `xml:",cdata"`
}

func main() {
    var obj parent
    err := xml.Unmarshal([]byte(doc), &obj)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(obj.Child2.Cdata1)

}

Playground



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow