Es posible crear un archivo XML en Golang a partir de un struct, te mostraremos como hacerlo. Desde luego es posible crear un XML simplemente generando una cadena con los nodos que requieras y para después escribirla en un archivo, pero con el método siguiente estarás seguro de que tu estructura de nodos estará bien formada y utilizarás una de las características para el manejo datos más potente de Golang.
Puedes copiar y probar el siguiente código:
package main import ( "encoding/xml" "fmt" "log" "os" ) //decodigo.com type Usuario struct { XMLName xml.Name `xml:"usuario"` Id int `xml:"id,attr"` Nombre string `xml:"nombre"` Username string `xml:"username"` Password string `xml:"password"` Email string `xml:"email"` } func main() { usuario := &Usuario{Id: 1, Nombre: "Jose", Username: "jose", Password: "123", Email: "correo@prueba.com"} out, _ := xml.MarshalIndent(usuario, " ", " ") fmt.Println(string(out)) f, err := os.Create("/home/decodigo/Documentos/go/archivos/archivo.xml") if err != nil { log.Fatal(err) } defer f.Close() _, err2 := f.WriteString(string(out)) if err2 != nil { log.Fatal(err2) } fmt.Println("listo") }
En el primer bloque de código definimos la estructura que queremos convertir a nodos de XML:
type Usuario struct { XMLName xml.Name `xml:"usuario"` Id int `xml:"id,attr"` Nombre string `xml:"nombre"` Username string `xml:"username"` Password string `xml:"password"` Email string `xml:"email"` }
Nuestro struct Usuario tiene varios elementos. Si estos elementos serán atributos en una etiqueta, deben estar indicados como en el caso del Id, después del tipo de dato
, con la cadena «attr» después de la coma.xml:"id,attr"
Los demás nodos que contienen información deben indicar el nombre que tendrán las etiquetas delimitadoras, como en el caso del Nombre: xml:»username».
Posteriormente usamos MarshalIndent del paquete encoding/xml.
out, _ := xml.MarshalIndent(usuario, " ", " ")
En las siguientes líneas creamos, escribimos y cerramos nuestro archivo de texto con extensión «.xml«
f, err := os.Create("/home/decodigo/Documentos/go/archivos/archivo.xml") if err != nil { log.Fatal(err) } defer f.Close() _, err2 := f.WriteString(string(out)) if err2 != nil { log.Fatal(err2) } fmt.Println("listo")
Desde luego, tu debes cambiar la ruta donde se desees que se genere el archivo. Al ejecutar el ejemplo generarás un archivo XML como el que se muestra a continuación:
Este ejemplo para crear un archivo XML en Golang es sencillo, desde luego el archivo final puede ser tan complejo como desees, siempre y cuando definas correctamente los sctucts que necesites convertir a XML.
Ver más: https://golang.org/doc/
Más información en inglés: https://geekole.com/create-an-xml-file-in-golang/