After some trail and error I'd like to share the issue I am dealing with.
I'm populating an struct and convert it to an XML ( xml.Marshal ) As you can see below the Foo example works as expected. The Bar example however creates an empty group1.
So my question is : "How do I prevent Group1 to be generated if there are no children set."
package main
import (
"fmt"
"encoding/xml"
)
type Example1 struct{
XMLName xml.Name `xml:"Example1"`
Element1 string `xml:"Group1>Element1,omitempty"`
Element2 string `xml:"Group1>Element2,omitempty"`
Element3 string `xml:"Group2>Example3,omitempty"`
}
func main() {
foo := &Example1{}
foo.Element1 = "Value1"
foo.Element2 = "Value2"
foo.Element3 = "Value3"
fooOut, _ := xml.Marshal(foo)
fmt.Println( string(fooOut) )
bar := &Example1{}
bar.Element3 = "Value3"
barOut, _ := xml.Marshal(bar)
fmt.Println( string(barOut) )
}
Foo Output :
<Example1>
<Group1>
<Element1>Value1</Element1>
<Element2>Value2</Element2>
</Group1>
<Group2>
<Example3>Value3</Example3>
</Group2>
</Example1>
Bar Output :
<Example1>
<Group1></Group1> <------ How to remove the empty parent value ?
<Group2>
<Example3>Value3</Example3>
</Group2>
</Example1>
Addition
Additionally i have tried doing the following, but still generates an empty "Group1":
type Example2 struct{
XMLName xml.Name `xml:"Example2"`
Group1 struct{
XMLName xml.Name `xml:"Group1,omitempty"`
Element1 string `xml:"Element1,omitempty"`
Element2 string `xml:"Element2,omitempty"`
}
Element3 string `xml:"Group2>Example3,omitempty"`
}
The full code can be found here : http://play.golang.org/p/SHIcBHoLCG . example to
EDIT : Changed the golang example to use MarshalIndent for readability
Edit 2 The example from Ainar-G Works good for hiding the empty parent, but Populating it makes it a lot harder. "panic: runtime error: invalid memory address or nil pointer dereference
"