在下面的示例中,是否有一种封送XML的方法,使得MyElement
下的子元素在根MyXML
下被封送,如下所示:
type MyXML struct {
XMLName xml.Name `xml:"myXML"`
Element *MyElement `xml:",any"`
}
type MyElement struct {
A string `xml:"a"`
B string `xml:"b"`
C string `xml:"c"`
}
我想要以下结果:
<myXML>
<a>blah</a>
<b>blah</b>
<c>blah</c>
</myXML>
如果我按原状编组,则会得到:
<myXML>
<Element>
<a>blah</a>
<b>blah</b>
<c>blah</c>
</Element>
</myXML>
通过MyElement结构实现xml.Marshaler接口是否可以实现?
谢谢!
最佳答案
您可以在结构上使用XMLName
类型的xml.Name
字段将其编组为您想要的名称。
type MyXML struct {
XMLName xml.Name `xml:"myXML"`
A string `xml:"a"`
B string `xml:"b"`
C string `xml:"c"`
}
func main() {
testXML := MyXML{
A: "test a",
B: "test b",
C: "test c",
}
xmlBytes, err := xml.Marshal(testXML)
if err != nil {
fmt.Printf("error parsing xml: %s", err)
return
}
fmt.Println(string(xmlBytes))
}
This example on Go Playground