Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
在Go中解组XML_Xml_Go - Fatal编程技术网

在Go中解组XML

在Go中解组XML,xml,go,Xml,Go,我有以下xml“文件”: 1439954818555 34317132 218491030 2015-08-21 09:50 483406220 澳大利亚规则 AFL 不 山楂鹰 1251 1251 参观 阿德莱德港电力公司 1252 1252 家 您可以这样做: xmlReader := bytes.NewReader([]byte(your_xml_as_a_string_here)) yourPinnacleLineFeed := new(Pinnacle_Line_Feed) if

我有以下xml“文件”:


1439954818555
34317132
218491030
2015-08-21 09:50
483406220
澳大利亚规则
AFL
不
山楂鹰
1251
1251
参观
阿德莱德港电力公司
1252
1252
家

您可以这样做:

xmlReader := bytes.NewReader([]byte(your_xml_as_a_string_here))
yourPinnacleLineFeed := new(Pinnacle_Line_Feed)
if err := xml.NewDecoder(xmlReader).Decode(yourPinnacleLineFeed); err != nil {
    return // or log.Panic(err.Error()) if in main
}
如果您的xml“文件”是字符串,则会出现这种情况。如果您是从internet上获得它(例如作为http响应的主体),resp.body已经可以满足读者的要求,因此您可以跳过第一行。如果你在操作系统上打开一个真实的文件,你也可以作为一个读卡器打开它,同样的事情

编辑:还有两件事:

  • 为了简单明了,您可以嵌套结构并删除xml.Name字段
  • 我还注意到,您忘记了结构中的参与者级别,导致没有参与者被取消签名
下面是一个更简单的版本,它可以使用一个可选函数来检查结果中的内容:

package main

import (
    "bytes"
    "encoding/json"
    "encoding/xml"
    "fmt"
    "log"
)

type Pinnacle_Line_Feed struct {
    PinnacleFeedTime string `xml:"PinnacleFeedTime"`
    LastContest      string `xml:"lastContest"`
    LastGame         string `xml:"lastGame"`
    Events           struct {
        Event []struct {
            Event_datetimeGMT string `xml:"event_datetimeGMT"`
            Gamenumber        string `xml:"gamenumber"`
            Sporttype         string `xml:"sporttype"`
            League            string `xml:"league"`
            IsLive            string `xml:"IsLive"`
            Participants      struct {
                Participant []struct {
                    Participant_name   string `xml:"participant_name"`
                    Contestantnum      int    `xml:"contestantnum"`
                    Rotnum             int    `xml:"rotnum"`
                    Visiting_home_draw string `xml:"visiting_home_draw"`
                } `xml:"participant"`
            } `xml:"participants"`
        } `xml:"event"`
    } `xml:"events"`
}

func main() {
    pinny_xml := `
         <pinnacle_line_feed>
            <PinnacleFeedTime>1439954818555</PinnacleFeedTime>
            <lastContest>34317132</lastContest>
            <lastGame>218491030</lastGame>
            <events>
                <event>
                    <event_datetimeGMT>2015-08-21 09:50</event_datetimeGMT>
                    <gamenumber>483406220</gamenumber>
                    <sporttype>Aussie Rules</sporttype>
                    <league>AFL</league>
                    <IsLive>No</IsLive>
                    <participants>
                        <participant>
                            <participant_name>Hawthorn Hawks</participant_name>
                            <contestantnum>1251</contestantnum>
                            <rotnum>1251</rotnum>
                            <visiting_home_draw>Visiting</visiting_home_draw>
                        </participant>
                        <participant>
                            <participant_name>Port Adelaide Power</participant_name>
                            <contestantnum>1252</contestantnum>
                            <rotnum>1252</rotnum>
                            <visiting_home_draw>Home</visiting_home_draw>
                        </participant>
                    </participants>
                    <periods></periods>
                </event>
            </events>
        </pinnacle_line_feed>
    `

    xmlReader := bytes.NewReader([]byte(pinny_xml))
    yourPinnacleLineFeed := new(Pinnacle_Line_Feed)
    if err := xml.NewDecoder(xmlReader).Decode(yourPinnacleLineFeed); err != nil {
        log.Panic(err.Error())
    }

    printX(yourPinnacleLineFeed)
}

func printX(x interface{}) (err error) {
    var xBytes []byte
    xBytes, err = json.MarshalIndent(x, "", "  ")
    if err != nil {
        return
    }
    fmt.Println(string(xBytes))
    return
}
主程序包
进口(
“字节”
“编码/json”
“编码/xml”
“fmt”
“日志”
)
类型Pinnacle_Line_Feed结构{
PinnacleFeedTime字符串`xml:“PinnacleFeedTime”`
LastContest字符串`xml:“LastContest”`
LastGame字符串`xml:“LastGame”`
事件结构{
事件[]结构{
Event_datetimeGMT字符串`xml:“Event_datetimeGMT”`
Gamenumber字符串`xml:“Gamenumber”`
Sporttype字符串`xml:“Sporttype”`
League string`xml:“League”`
IsLive字符串`xml:“IsLive”`
参与者结构{
参与者[]结构{
参与者名称字符串`xml:“参与者名称”`
竞争者编号int`xml:“竞争者编号”`
Rotnum int`xml:“Rotnum”`
Visiting_home_draw字符串`xml:“Visiting_home_draw”`
}`xml:“参与者”`
}`xml:“参与者”`
}`xml:“事件”`
}`xml:“事件”`
}
func main(){
pinny_xml:=`
1439954818555
34317132
218491030
2015-08-21 09:50
483406220
澳大利亚规则
AFL
不
山楂鹰
1251
1251
参观
阿德莱德港电力公司
1252
1252
家
`
xmlReader:=bytes.NewReader([]字节(pinny_xml))
yourPinnacleLineFeed:=新建(PinnacleLineFeed)
如果错误:=xml.NewDecoder(xmlReader).Decode(yourPinnacleLineFeed);错误!=nil{
log.Panic(err.Error())
}
printX(您的PinnacleLineFeed)
}
func printX(x接口{})(错误){
变量xBytes[]字节
xBytes,err=json.marshallindent(x,“,”)
如果错误!=零{
返回
}
fmt.Println(字符串(xBytes))
返回
}

您需要将结构中的所有字段都大写。xml解码器需要导出字段才能正常工作。去操场。

谢谢尼古拉斯!我根据你的回复编辑了我的评论,看起来这不会有任何问题,但结果是空的。看起来我有点晚了,杰伊·克拉姆是对的!结构中的大写首字母一直都是!