1 回答
TA贡献1995条经验 获得超2个赞
您构建结构的方式不正确。此外,因为您使用的是 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}}
- 1 回答
- 0 关注
- 113 浏览
添加回答
举报