我正在尝试实现以下XML输出
<?xml version="1.0" encoding="UTF-8"?>
<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2012-12-12/">
<Name>DNS domain name</Name>
<CallerReference>unique description</CallerReference>
<HostedZoneConfig>
<Comment>optional comment</Comment>
</HostedZoneConfig>
</CreateHostedZoneRequest>
我有以下输出非常接近的XML但是我无法编码到CreateHostedZoneRequest
的xmlns =“https://route53.amazonaws.com/doc/2012-12-12/
package main
import "fmt"
import "encoding/xml"
type ZoneRequest struct {
Name string
CallerReference string
Comment string `xml:"HostedZoneConfig>Comment"`
}
var zoneRequest = ZoneRequest{
Name: "DNS domain name",
CallerReference: "unique description",
Comment: "optional comment",
}
func main() {
tmp, _ := createHostedZoneXML(zoneRequest)
fmt.Println(tmp)
}
func createHostedZoneXML(zoneRequest ZoneRequest) (response string, err error) {
tmp := struct {
ZoneRequest
XMLName struct{} `xml:"CreateHostedZoneRequest"`
}{ZoneRequest: zoneRequest}
byteXML, err := xml.MarshalIndent(tmp, "", ` `)
if err != nil {
return "", err
}
response = xml.Header + string(byteXML)
return
}
http://play.golang.org/p/pyK76VPD5-
如何将xmlns编码为CreateHostedZoneRequest?
答案 0 :(得分:5)
我有一个类似的问题。 Unmarshal方法(http://golang.org/pkg/encoding/xml/#Unmarshal)的文档包含:
如果XMLName字段具有“name”或“namespace-URL name”形式的关联标记,则XML元素必须具有给定名称(以及可选的名称空间),否则Unmarshal将返回错误。
在struct标签中使用“namespace-URL name”:
type ZoneRequest struct {
XMLName xml.Name `xml:"https://route53.amazonaws.com/doc/2012-12-12/ CreateHostedZoneRequest"`
}
应该产生:
<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2012-12-12/">
答案 1 :(得分:4)
你可以这样做,这可能不是最优雅的解决方案,但似乎有效
type ZoneRequest struct {
Name string
CallerReference string
Comment string `xml:"HostedZoneConfig>Comment"`
Xmlns string `xml:"xmlns,attr"`
}
var zoneRequest = ZoneRequest{
Name: "DNS domain name",
CallerReference: "unique description",
Comment: "optional comment",
Xmlns: "https://route53.amazonaws.com/doc/2012-12-12/",
}
产
<?xml version="1.0" encoding="UTF-8"?>
<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2012-12-12/">
<Name>DNS domain name</Name>
<CallerReference>unique description</CallerReference>
<HostedZoneConfig>
<Comment>optional comment</Comment>
</HostedZoneConfig>
</CreateHostedZoneRequest>