Trabalho com XML em Go (Golang): biblioteca padrão encoding/xml

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com XML em Go (Golang): guia detalhado do pacote encoding/xml



No desenvolvimento moderno com Go (Golang), a tarefa de processar dados XML é bastante comum — desde a integração com sistemas legados até a troca de dados em serviços SOAP. A biblioteca padrão do Go fornece um pacote poderoso e flexível encoding/xml, que permite analisar, criar e transformar documentos XML de forma eficiente. Neste artigo, abordaremos detalhadamente todos os principais recursos para trabalhar com XML em Go.



Principais recursos do pacote encoding/xml



O pacote encoding/xml implementa uma interface simples para serialização (marshalling) de estruturas Go em XML e desserialização (unmarshalling) de XML de volta para estruturas. Ele suporta:



  • Conversão de estruturas Go em documentos XML e vice-versa
  • Trabalho com atributos, elementos aninhados e namespaces
  • Parsing em streaming de grandes arquivos XML via xml.Decoder
  • Regras de serialização personalizáveis usando tags de struct


Instalação e importação do pacote



O pacote encoding/xml faz parte da biblioteca padrão do Go, portanto, não é necessária instalação adicional. Para usá-lo, basta importá-lo:



import (    "encoding/xml"    "fmt"    "os")


Marshalling: estrutura Go → XML



Para converter uma estrutura Go em XML, usa-se a função xml.Marshal() ou xml.MarshalIndent() para saída formatada. Veja um exemplo:



type Person struct {    XMLName   xml.Name `xml:"person"`    ID        int      `xml:"id,attr"`    FirstName string   `xml:"name>first"`    LastName  string   `xml:"name>last"`    Age       int      `xml:"age"`}

func main() { p := Person{ ID: 123, FirstName: "João", LastName: "Silva", Age: 30, }

output, err := xml.MarshalIndent(p, "", " ") if err != nil { fmt.Printf("Erro de marshalling: %v", err) return }

fmt.Println(string(output))}


Resultado da execução:



<person id="123">  <name>    <first>João</first>    <last>Silva</last>  </name>  <age>30</age></person>


Unmarshalling: XML → estrutura Go



O processo inverso — conversão de dados XML em estrutura Go — é feito com xml.Unmarshal():



func unmarshalExample() {    xmlData := `<person id="456">  <name>    <first>Maria</first>    <last>Santos</last>  </name>  <age>25</age></person>`

var p Person err := xml.Unmarshal([]byte(xmlData), &p) if err != nil { fmt.Printf("Erro de unmarshalling: %v", err) return }

fmt.Printf("ID: %d, Nome: %s %s, Idade: %d", p.ID, p.FirstName, p.LastName, p.Age) // Saída: ID: 456, Nome: Maria Santos, Idade: 25}


Trabalho com atributos e elementos aninhados



O pacote encoding/xml usa tags de struct para controlar o mapeamento. As principais diretivas de tags:



  • xml:"nome" — nome do elemento
  • xml:"nome,attr" — atributo do elemento
  • xml:"pai>filho" — elemento aninhado
  • xml:",chardata" — conteúdo textual
  • xml:",innerxml" — XML bruto dentro do elemento
  • xml:",comment" — comentário XML
  • xml:"-" — ignorar campo


Parsing em streaming de grandes arquivos XML



Para processar documentos XML grandes (por exemplo, arquivos de gigabytes), usa-se o parser em streaming xml.Decoder. Isso permite não carregar

Recommendations