【问题标题】:GOLANG xml decodingGOLANG xml解码
【发布时间】:2017-04-19 09:23:01
【问题描述】:

在 Go 中,我试图将此 XML 解码为“fileRetriever”结构。我只关心文件名:

 <?xml version="1.0" encoding="ISO-8859-1" ?>
 <FileRetriever>
   <FileList>
       <File name="Name1" />
       <File name="Name2" />
   </FileList>
 </FileRetriever>

我认为这段代码 sn-p 很接近,但我似乎看不出哪里出错了。它不会产生错误,但也会产生一个零长度的文件名列表:

import (
    "encoding/base64"
    "encoding/xml"
    "fmt"
    "net/http"

    "golang.org/x/net/html/charset"

)
type fileRetriever struct {
    Files []file `xml:"FileRetriever>FileList>File"`
}

type file struct {
    Name string `xml:"name,attr"`
}

func Main(){
    retrieve()
}

func retrieve()(retriever *fileRetriever){
    req := ... //set up http.NewRequest()
    client := &http.Client{}
    rsp, err := client.Do(req)

    if err != nil {
        log.Fatal(err)
    }

    defer rsp.Body.Close()

    decoder := xml.NewDecoder(rsp.Body)
    decoder.CharsetReader = charset.NewReaderLabel

    retriever = &fileRetriever{}

    err = decoder.Decode(&retriever)

    if err != nil {
        fmt.Println(err)
    }

    return retriever, xTidx
}

【问题讨论】:

    标签: xml go decoding


    【解决方案1】:

    根元素会自动解码为您传递给Decode 的值,因此您无需在Files 字段标记中提及它。

    所以只需将xml:"FileRetriever&gt;FileList&gt;File" 更改为xml:"FileList&gt;File"

    【讨论】:

    • 完美。谢谢。这样就解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多