Marshalling XML Go XMLName + xmlns
I had a similar question. The docs for the Unmarshal method (http://golang.org/pkg/encoding/xml/#Unmarshal) have:
If the XMLName field has an associated tag of the form "name" or "namespace-URL name", the XML element must have the given name (and, optionally, name space) or else Unmarshal returns an error.
Using "namespace-URL name" in the struct tag:
type ZoneRequest struct {
XMLName xml.Name `xml:"https://route53.amazonaws.com/doc/2012-12-12/ CreateHostedZoneRequest"`
}
Should produce:
<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2012-12-12/">
You can do this, which possibly isn't the most elegant solution, but seems to work
Playground link
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/",
}
Producing
<?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>