用golang读取XML

时间:2015-05-14 20:17:22

标签: go

我正在尝试使用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)

1 个答案:

答案 0 :(得分:3)

其他软件包(包括encoding/jsonencoding/xml)只能看到导出的数据。首先,您的titledesc应该相应地TitleDesc

其次,在打印字符串时,您在%d中使用Sprintf(整数)格式。这就是为什么你得到%!d(string=),这意味着“它不是一个整数,它是一个字符串!”。

第三,您的XML中没有查询,因此直接解组到q.Chan

这是工作示例。 http://play.golang.org/p/l0ImL2ID-j