简体   繁体   English

高朗xml解码

[英]GOLANG xml decoding

In Go, I'm trying to decode this XML into the "fileRetriever" struct. 在Go中,我试图将XML解码为“ fileRetriever”结构。 I only care about the file names: 我只关心文件名:

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

I think this code snippet is close, but I can't seem to see where I'm going wrong. 我认为该代码段很接近,但是我似乎看不到哪里出错了。 It produces no errors, but also a zero-length list of file names: 它不会产生任何错误,但是会产生一个零长度的文件名列表:

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
}

The root element is automatically decoded into the value you pass to Decode so you don't need to mention it in the Files field tag. 根元素会自动解码为传递给Decode的值,因此您无需在“ Files字段标签中提及它。

So just change xml:"FileRetriever>FileList>File" to xml:"FileList>File" . 因此,只需将xml:"FileRetriever>FileList>File"更改为xml:"FileList>File"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM