根据Go使用Marshal XML子元素

时间:2017-11-17 05:32:23

标签: xml go

是否有一种方法可以在以下示例中封送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接口吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在结构上使用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