我正在尝试使用golang读取som XML。我基于这个有效的例子。 https://gist.github.com/kwmt/6135123#file-parsetvdb-go
这是我的档案:
Castle0.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Channel>
<Title>test</Title>
<Description>this is a test</Description>
</Channel>
test.go
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
type Query struct {
Chan Channel `xml:"Channel"`
}
type Channel struct {
title string `xml:"Title"`
desc string `xml:"Description"`
}
func (s Channel) String() string {
return fmt.Sprintf("%s - %d", s.title, s.desc)
}
func main() {
xmlFile, err := os.Open("Castle0.xml")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer xmlFile.Close()
b, _ := ioutil.ReadAll(xmlFile)
var q Query
xml.Unmarshal(b, &q)
fmt.Println(q.Chan)
}
输出: - %!d(string =)
任何人都知道我做错了什么? (我这样做是为了学习去,所以对我很轻松:P)
答案 0 :(得分:3)
其他软件包(包括encoding/json
和encoding/xml
)只能看到导出的数据。首先,您的title
和desc
应该相应地Title
和Desc
。
其次,在打印字符串时,您在%d
中使用Sprintf
(整数)格式。这就是为什么你得到%!d(string=)
,这意味着“它不是一个整数,它是一个字符串!”。
第三,您的XML中没有查询,因此直接解组到q.Chan
。