Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Unmarshal解析XML_Xml_Parsing_Go - Fatal编程技术网

如何使用Unmarshal解析XML

如何使用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

我在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"?>
    <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}}