-
Notifications
You must be signed in to change notification settings - Fork 18.5k
Closed
Labels
Milestone
Description
When using MarshalXML if you want to modify just the surrounding tag it's difficult to
do so. Calling EncodeElement results in a recursive error.
The only work around, other than manually marshaling each field, is to typedef the
struct to an alternate type:
type _TransactionRequest TransactionRequest;
func (tr TransactionRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return e.EncodeElement(_TransactionRequest(tr), xml.StartElement{
Name: xml.Name{"", "createTransactionRequest"},
Attr: []xml.Attr{
xml.Attr{xml.Name{"", "xmlns:xsi"}, "http://www.w3.org/2001/XMLSchema-instance";},
xml.Attr{xml.Name{"", "xmlns:xsd"}, "http://www.w3.org/2001/XMLSchema";},
xml.Attr{xml.Name{"", "xmlns"}, "AnetApi/xml/v1/schema/AnetApiSchema.xsd"},
},
})
}
There needs to be a way to Marshal the contents of the struct without the surrounding
tag, perhaps "EncodeBody":
func (tr TransactionRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) (err
error) {
start = xml.StartElement{
Name: xml.Name{"", "createTransactionRequest"},
Attr: []xml.Attr{
xml.Attr{xml.Name{"", "xmlns:xsi"}, "http://www.w3.org/2001/XMLSchema-instance";},
xml.Attr{xml.Name{"", "xmlns:xsd"}, "http://www.w3.org/2001/XMLSchema";},
xml.Attr{xml.Name{"", "xmlns"}, "AnetApi/xml/v1/schema/AnetApiSchema.xsd"},
},
}
if err = e.EncodeToken(start); err != nil {
return
}
if err = e.EncodeBody(tr); err != nil {
return
}
if err = e.EncodeToken(EndElement{start.Name}); err != nil {
return
}
}
Which compiler are you using (5g, 6g, 8g, gccgo)?
gc default
Which operating system are you using?
OS X 10.8.5
Which version are you using? (run 'go version')
go version devel +f4d1cb8d9a91 Thu Sep 19 22:34:33 2013 +1000 darwin/amd64
Please provide any additional information below.