如何使用Unmarshal解析XML
我在Go中编写了一个非常简单的XML解析器,但是我的XML.Unmarshal函数不能正常工作。这是示例代码 我不确定我的结构是否正确。我读了一些页面,我认为这种格式更有条理如何使用Unmarshal解析XML,xml,parsing,go,Xml,Parsing,Go,我在Go中编写了一个非常简单的XML解析器,但是我的XML.Unmarshal函数不能正常工作。这是示例代码 我不确定我的结构是否正确。我读了一些页面,我认为这种格式更有条理 package main import ( "fmt" "encoding/xml" ) //this a xml sample of my document. var str = `<?xml version="1.0" encoding="ISO-8859-1" standalone="yes
package main
import (
"fmt"
"encoding/xml"
)
//this a xml sample of my 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 XmlTISSIndex struct {
XMLCabecalho struct {
XMLAnsIdentificacaoTransacao struct {
XMLAnstipoTransacao string `xml:"tipoTransacao"`
XMLAnsSequenciaTransacao string `xml:"sequencialTransacao"`
XMLAnsDataRegistroTransacao string `xml:"dataRegistroTransacao"`
XMLAnsHoraRegistroTransacao string `xml:"horaRegistroTransacao"`
}
XMLAnsOrigem struct {
XMLAnsRegistro string `xml:"registroANS"`
}
XMLAnsDestino struct {
XMLAnsIdentificacaoPrestador struct {
XMLAnsCodigoPrestadorNaOperadora string `xml:"codigoPrestadorNaOperadora"`
}
}
}
}
func main() {
// variables
var data XmlTISSIndex
buffer := make([]byte,len(str))
buffer = []byte(str)
xml.Unmarshal(buffer,&data)
fmt.Print(data)
fmt.Println(data.XMLCabecalho.XMLAnsIdentificacaoTransacao.XMLAnsDataRegistroTransacao)
fmt.Println(data.XMLCabecalho.XMLAnsIdentificacaoTransacao.XMLAnsHoraRegistroTransacao)
fmt.Println(data.XMLCabecalho.XMLAnsIdentificacaoTransacao.XMLAnsSequenciaTransacao)
fmt.Println(data.XMLCabecalho.XMLAnsIdentificacaoTransacao.XMLAnstipoTransacao)
}
主程序包
进口(
“fmt”
“编码/xml”
)
//这是我的文档的一个xml示例。
var str=`
描述
5443811
2020-02-27
17:35:11
005711
687146
3.03.03
`
类型XmlTISSIndex结构{
XMLCabecalho结构{
XMLANSCAAOTRANSACAO结构{
XMLAnstipoTransacao字符串`xml:“tipoTransacao”`
xmlanssequencialtransacao字符串`xml:“sequencialTransacao”`
XMLAnsDataRegistroTransacao字符串`xml:“dataRegistroTransacao”`
XMLANSHRARegistroTransacao字符串`xml:“horaRegistroTransacao”`
}
XMLAnsOrigem结构{
xmlansristro字符串`xml:“registroANS”`
}
xmlandestino结构{
XmlAnsIdentificationCaoPrestador结构{
XmlAnsCodigoPrestadorAOPeradora字符串`xml:“CodigoPrestadorAOPeradora”`
}
}
}
}
func main(){
//变数
var数据XmlTISSIndex
缓冲区:=make([]字节,len(str))
缓冲区=[]字节(str)
Unmarshal(缓冲区和数据)
格式打印(数据)
fmt.Println(data.XMLCabecalho.xmlansignificacaotransacao.xmlansdataregistortransacao)
fmt.Println(data.XMLCabecalho.xmlansignificacaotransacao.xmlanhoraregistrotransacao)
fmt.Println(data.XMLCabecalho.xmlansignificatacaotransacao.xmlansequenciatransacao)
fmt.Println(data.XMLCabecalho.xmlansignificataotransacao.XMLAnstipoTransacao)
}
构建结构的方式不正确。另外,由于您使用的是ISO-8859-1编码,这使得事情变得有点棘手
我曾经帮助你弄明白这一点
像这样的方法应该会奏效:
主程序包
进口(
“字节”
“编码/xml”
“fmt”
“golang.org/x/net/html/charset”//当我运行此代码时,有关数据的信息不会被打印出来。您希望发生什么?非常感谢Matt。我阅读了您发送给我的文章,我对您的代码做了一些更改。我创建了一个合并结构,因为我的东西很容易理解。代码运行良好!!!
{{ mensagem} {{ cabecalho} {{ identificacaoTransacao} DESCRICAO 5443811 2020-02-27 17:35:11} {{ origem} 005711} {{ destino} {{ identificacaoPrestador} 687146}} 3.03.03}}