简单的XML解组返回空值

时间:2015-07-24 15:52:08

标签: xml go xml-parsing

我正在尝试在Go中解组一些基本的XML。我之前已经能够在Go中解组非常大的XML文件了,所以我在这里遇到的问题让我非常困惑。

Unmarshalling会找到一个项目,但是所有值都是null默认值:字符串为空,浮点数为零。

任何提示都会有所帮助。感谢。

XML

<config><throttle delay="20" unit="s" host="feeds.feedburner.com"/></config>

输出

host:"", unit:"", delay:0.000000

代码

package main

import (
    "encoding/xml"
    "fmt"
)

// Config allows for unmarshling of the remote configuration file.
type Config struct {
    XMLName    xml.Name     `xml:"config"`
    Throttlers []*Throttler `xml:"throttle"`
}

// Throttler stores the throttle information read from the configuration file.
type Throttler struct {
    host  string  `xml:"host,attr"`
    unit  string  `xml:"unit,attr"`
    delay float64 `xml:"delay,attr"`
}

func main() {

    data := `
        <config><throttle delay="20" unit="s" host="feeds.feedburner.com"/></config>
    `
    config := Config{}
    err := xml.Unmarshal([]byte(data), &config)
    if err != nil {
        fmt.Printf("error: %config", err)
        return
    }
    thr := config.Throttlers[0]
    fmt.Println(fmt.Sprintf("host:%q, unit:%q, delay:%f", thr.host, thr.unit, thr.delay))

}

Go playground link here

1 个答案:

答案 0 :(得分:2)

同样简单,Throttler结构不会导出其字段。因此,将结构更改为具有大写变量使它们可以访问。

Fixed example here