我一直在玩 Go 的 XML 包,但看不出以下代码有什么问题。package mainimport ( "encoding/xml" "fmt" "net/http") type Channel struct { Items Item}type Item struct { Title string `xml:"title"` Link string `xml:"link"` Description string `xml:"description"`}func main() { var items = new(Channel) res, err := http.Get("http://www.reddit.com/r/google.xml") if err != nil { fmt.Printf("Error: %v\n", err) } else { decoded := xml.NewDecoder(res.Body) err = decoded.Decode(items) if err != nil { fmt.Printf("Error: %v\n", err) } fmt.Printf("Title: %s\n", items.Items.Title) }}上面的代码运行没有任何错误并打印到终端:Title:该结构似乎是空的,但我不明白为什么它没有被 XML 数据填充。
3 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
如今,Reddit RSS 提要似乎已更改为该atom类型。这意味着常规解析将不再起作用。go-rss的 atom 功能可以解析这样的提要:
//Feed struct for RSS
type Feed struct {
Entry []Entry `xml:"entry"`
}
//Entry struct for each Entry in the Feed
type Entry struct {
ID string `xml:"id"`
Title string `xml:"title"`
Updated string `xml:"updated"`
}
//Atom parses atom feeds
func Atom(resp *http.Response) (*Feed, error) {
defer resp.Body.Close()
xmlDecoder := xml.NewDecoder(resp.Body)
xmlDecoder.CharsetReader = charset.NewReader
feed := Feed{}
if err := xmlDecoder.Decode(&feed); err != nil {
return nil, err
}
return &feed, nil
}
- 3 回答
- 0 关注
- 221 浏览
添加回答
举报
0/150
提交
取消