在下面的示例中,是否有一种封送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

10-08 15:25