0Pricing
Go Academy · Lección

encoding/xml

Trabaje con XML

encoding/xml es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Trabajar con XML

XML es un formato detallado basado en etiquetas que todavía es común en sistemas y configuraciones heredados. El paquete de Go encoding/xml lo serializa y deserializa, de forma similar al paquete json.

Marshal a XML

xml.Marshal convierte un valor de Go en bytes XML.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := xml.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Etiquetas XML

La etiqueta xml controla los nombres de los elementos, del mismo modo que las etiquetas json controlan las claves JSON.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

Elemento raíz con XMLName

Un campo de tipo xml.Name llamado XMLName establece el nombre del elemento raíz.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	XMLName xml.Name "xml:\"user\""
	Name    string   "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{Name: "Ann"})
	fmt.Println(string(b))
}

Atributos

Añada ,attr a una etiqueta para representar un campo como un atributo XML en lugar de como un elemento secundario.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	XMLName xml.Name "xml:\"user\""
	ID      int      "xml:\"id,attr\""
	Name    string   "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{ID: 7, Name: "Ann"})
	fmt.Println(string(b))
}

Unmarshal de XML

xml.Unmarshal analiza bytes XML en un puntero y relaciona los nombres de los elementos con las etiquetas.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	var u User
	xml.Unmarshal([]byte("<User><name>Bob</name></User>"), &u)
	fmt.Println(u.Name)
}

Elementos anidados

Las estructuras anidadas se corresponden con elementos XML anidados, formando un árbol.

package main

import (
	"encoding/xml"
	"fmt"
)

type Address struct {
	City string "xml:\"city\""
}
type User struct {
	Name    string  "xml:\"name\""
	Address Address "xml:\"address\""
}

func main() {
	b, _ := xml.Marshal(User{"Ann", Address{"Rome"}})
	fmt.Println(string(b))
}

XML con formato

xml.MarshalIndent formatea la salida con sangría para facilitar su lectura.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	b, _ := xml.MarshalIndent(User{"Ann"}, "", "  ")
	fmt.Println(string(b))
}

Elementos repetidos

Un campo slice se convierte en una serie de elementos XML repetidos, uno por elemento.

package main

import (
	"encoding/xml"
	"fmt"
)

type List struct {
	Items []string "xml:\"item\""
}

func main() {
	b, _ := xml.Marshal(List{Items: []string{"a", "b"}})
	fmt.Println(string(b))
}

JSON frente a XML

Las API son equivalentes: Marshal, Unmarshal, MarshalIndent y etiquetas de estructura. XML añade atributos y el concepto de raíz XMLName. Prefiera JSON para las API nuevas; XML para los sistemas heredados.

Declaración de cabecera

La constante xml.Header contiene la cadena de declaración XML estándar que puede anteponer a la salida para crear documentos completos.

package main

import (
	"encoding/xml"
	"fmt"
)

func main() {
	fmt.Print(xml.Header)
}

Comprobación rápida

¿Qué hace la opción ,attr en una etiqueta de estructura xml?

Repaso

encoding/xml:

  • xml.Marshal / Unmarshal reflejan la API de json
  • Las etiquetas xml asignan nombres a los elementos; ,attr crea atributos
  • XMLName establece la raíz; los slices repiten los elementos

Preguntas frecuentes

¿La lección «encoding/xml» es gratis?

Sí — el texto completo de «encoding/xml» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «encoding/xml»?

Trabaje con XML Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «encoding/xml»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Repaso de encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob y codificación binaria
← Volver a Go Academy