То, как вы строили свои структуры, было неверным. Кроме того, поскольку вы используете кодировку ISO-8859-1, это немного усложнило ..
Я использовал эту статью для помощи в выяснении этого.
Примерно так должно работать:
package main
import (
"bytes"
"encoding/xml"
"fmt"
"golang.org/x/net/html/charset" // <-- Had to use this due to ISO-8859-1 encoding
)
// Sample document
var str = `<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<mensagem>
<cabecalho>
<identificacaoTransacao>
<tipoTransacao>DESCRICAO</tipoTransacao>
<sequencialTransacao>5443811</sequencialTransacao>
<dataRegistroTransacao>2020-02-27</dataRegistroTransacao>
<horaRegistroTransacao>17:35:11</horaRegistroTransacao>
</identificacaoTransacao>
<origem>
<registroANS>005711</registroANS>
</origem>
<destino>
<identificacaoPrestador>
<codigoPrestadorNaOperadora>687146</codigoPrestadorNaOperadora>
</identificacaoPrestador>
</destino>
<Padrao>3.03.03</Padrao>
</cabecalho>
</mensagem>`
type IdentificacaoTransacao struct {
XMLName xml.Name `xml:"identificacaoTransacao"`
TipoTransacao string `xml:"tipoTransacao"`
SequencialTransacao string `xml:"sequencialTransacao"`
DataRegistroTransacao string `xml:"dataRegistroTransacao"`
HoraRegistroTransacao string `xml:"horaRegistroTransacao"`
}
type Origem struct {
XMLName xml.Name `xml:"origem"`
RegistroANS string `xml:"registroANS"`
}
type IdentificacaoPrestador struct {
XMLName xml.Name `xml:"identificacaoPrestador"`
CodigoPrestadorNaOperadora string `xml:"codigoPrestadorNaOperadora"`
}
type Destino struct {
XMLName xml.Name `xml:"destino"`
IdentificacaoPrestador IdentificacaoPrestador `xml:"identificacaoPrestador"`
}
type Cabecalho struct {
XMLName xml.Name `xml:"cabecalho"`
IdentificacaoTransacao IdentificacaoTransacao `xml:"identificacaoTransacao"`
Origem Origem `xml:"origem"`
Destino Destino `xml:"destino"`
Padrao string `xml:"Padrao"`
}
type Mensagem struct {
XMLName xml.Name `xml:"mensagem"`
Cabecalho Cabecalho `xml:"cabecalho"`
}
func main() {
var mensagem Mensagem
var err error
byteStr := []byte(str)
reader := bytes.NewReader(byteStr)
decoder := xml.NewDecoder(reader)
decoder.CharsetReader = charset.NewReaderLabel
err = decoder.Decode(&mensagem)
if err != nil {
fmt.Println("Decoder error:", err)
}
fmt.Println(mensagem)
}
Что дает мне следующий вывод:
{{ mensagem} {{ cabecalho} {{ identificacaoTransacao} DESCRICAO 5443811 2020-02-27 17:35:11} {{ origem} 005711} {{ destino} {{ identificacaoPrestador} 687146}} 3.03.03}}