为了账号安全,请及时绑定邮箱和手机立即绑定

无法从 GO 中的 XML 中提取正确的数据

无法从 GO 中的 XML 中提取正确的数据

Go
达令说 2021-06-03 17:38:55
我正在从 Web 检索一些 XML,但在提取所需数据时遇到问题。这是 XML:<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0" created="2013-04-13T16:54:01.107Z">    <artist-list count="2" offset="0">        <artist id="35dac7d2-0b1f-470f-9a5a-c53c8821f6d6" type="Person" ext:score="100">            <name>Eric Prydz</name>            <sort-name>Prydz, Eric</sort-name>            <gender>male</gender>            <country>SE</country>        </artist>    </artist-list></metadata>我想提取姓名、性别和国家。这是代码:package mainimport (    "encoding/xml"    "fmt"    "io/ioutil"    "net/http")func main() {    client := &http.Client{}    req, _ := http.NewRequest("GET", "http://www.musicbrainz.org/ws/2/artist/?query=artist:Fred", nil)    res, _ := client.Do(req)    bs, _ := ioutil.ReadAll(res.Body)    var artist Artist    xml.Unmarshal(bs, &artist)    fmt.Printf("%#v\n", artist)}type Artist struct {    Name    string `xml: "name"`    Gender  string `xml: "gender"`    Country string `xml: "country"`}但每次我运行这个我总是得到这个:main.Artist{Name:"", Gender:"", Country:""}有人可以指出问题出在哪里吗?
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

好的,问题是,您没有充分描述xml要解组的数据。你的数据看起来更像


struct metadata {

    // you need to tag it because go field names can't contain -'s

    artists []Artist "artist-list"

}

这样的事情应该有效。基本上,Unmarshal只会看顶层节点,而不是走下来寻找结构。


查看完整回答
反对 回复 2021-06-07
  • 1 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信