go - 使用 golang 读取 XML

标签 go

我正在尝试使用 golang 读取 som XML。我基于这个有效的例子。 https://gist.github.com/kwmt/6135123#file-parsetvdb-go

这是我的文件:

城堡0.xml

<?xml version="1.0" encoding="UTF-8" ?>
<Channel>
<Title>test</Title>
<Description>this is a test</Description>
</Channel>

测试.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(字符串=)

有人知道我做错了什么吗? (我这样做是为了学习围棋,所以对我放轻松 :P)

最佳答案

其他包,包括encoding/jsonencoding/xml 只能看到导出的数据。所以首先你的titledesc应该是TitleDesc

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

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

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

关于go - 使用 golang 读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30246565/

相关文章:

Go 1.7 从 Windows 到 Linux/Ubuntu 的交叉编译

docker - 无法从docker-machine(Virtual Box)上的docker图像运行Go(lang)应用程序

go - 扩展 HTTP 处理程序

go - 如何在gin-gonic/gin中间件中实现高效的IP白名单

Go 计算虚拟内核,而不是物理内核?

go - 继续解析 SMS PDU

go - 从peer删除ChainCode

mongodb - 在正则表达式中不将$作为字符串匹配

go - 如何在 golang 中使函数线程安全

go - 如何在 Go 中重构模块名称?