英文:
How to unmarshall S3 XML in Go?
问题
我正在对我的S3存储桶的根目录进行HTTP GET
请求,以列出其中的内容。我希望我的应用程序能够解析这些内容,以了解存储桶中有什么。
XML的格式如下:
<?xml
version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>my-bucket</Name>
<Contents>
<Key>one.json</Key>
</Contents>
<Contents>
<Key>three.json</Key>
</Contents>
<Contents>
<Key>two.json</Key>
</Contents>
</ListBucketResult>
为了解析它,我尝试使用以下代码:
type S3Content struct {
Key string `xml:"Key"`
}
type S3ListBucketResult struct {
Contents []S3Content `xml:"Contents"`
}
type HttpS3Response struct {
ListBucketResult S3ListBucketResult `xml:"ListBucketResult"`
}
resp, _ := http.Get("https://my-bucket.s3.amazonaws.example.com")
body, _ := ioutil.ReadAll(resp.Body)
var parsed HttpS3Response
xml.Unmarshal(body, &parsed)
fmt.Println(parsed.ListBucketResult.Contents)
然而,Contents
切片似乎是空的。你知道我做错了什么吗?
英文:
I am making an http GET
request on the root directory of my s3 bucket to list the contents. I would like my application to parse the contents to understand what's in the bucket.
The XML looks like this:
<?xml
version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>my-bucket</Name>
<Contents>
<Key>one.json</Key>
</Contents>
<Contents>
<Key>three.json</Key>
</Contents>
<Contents>
<Key>two.json</Key>
</Contents>
</ListBucketResult>
To parse it I am trying to use this:
type S3Content struct {
Key string `xml:"Key"`
}
type S3ListBucketResult struct {
Contents []S3Content `xml:"Contents"`
}
type HttpS3Response struct {
ListBucketResult S3ListBucketResult `xml:"ListBucketResult"`
}
resp, _ := http.Get("https://my-bucket.s3.amazonaws.example.com")
body, _ := ioutil.ReadAll(resp.Body)
var parsed HttpS3Response
xml.Unmarshal(body, &parsed)
fmt.Println(parsed.ListBucketResult.Contents)
However the Contents
slice appears empty. Any idea what I am doing wrong?
答案1
得分: 2
哦,根键不包含在路径中。
type S3Content struct {
Key string `xml:"Key"`
}
type HttpS3Response struct {
Contents []S3Content `xml:"Contents"`
}
resp, _ := http.Get("https://my-bucket.s3.amazonaws.example.com")
body, _ := ioutil.ReadAll(resp.Body)
var parsed HttpS3Response
xml.Unmarshal(body, &parsed)
fmt.Println(parsed.Contents)
请注意,这是一个用Go语言编写的代码片段,用于从Amazon S3存储桶中获取内容并解析XML响应。它定义了两个结构体类型:S3Content
和HttpS3Response
。S3Content
结构体表示S3存储桶中的内容,其中包含一个Key
字段表示内容的键。HttpS3Response
结构体表示HTTP响应,其中包含一个Contents
字段,它是一个S3Content
类型的切片。
代码通过HTTP GET请求获取S3存储桶的内容,并将响应的主体读取到body
变量中。然后,使用xml.Unmarshal
函数将XML响应解析为HttpS3Response
类型的parsed
变量。最后,代码打印出parsed.Contents
,即S3存储桶中的内容列表。
请注意,这只是一个代码片段,可能需要根据实际情况进行适当的修改和完善。
英文:
Oh, the root key isn't included in the path
type S3Content struct {
Key string `xml:"Key"`
}
type HttpS3Response struct {
Contents []S3Content `xml:"Contents"`
}
resp, _ := http.Get("https://my-bucket.s3.amazonaws.example.com")
body, _ := ioutil.ReadAll(resp.Body)
var parsed HttpS3Response
xml.Unmarshal(body, &parsed)
fmt.Println(parsed.Contents)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论