如何在没有单独结构的情况下获取xml名称标签变体

如何在没有单独结构的情况下获取xml名称标签变体,xml,go,marshalling,Xml,Go,Marshalling,我尝试创建多个几乎相似的xml, 但是元素名称标记有点变化: <ELEM3_VARIANT_A></ELEM3_VARIANT_A> 但是如何更改元素名称(如xml名称标记) 使用实现接口的自定义类型 type VarElem struct { Name string Value string } func (v VarElem) MarshalXML(e *xml.Encoder, start xml.StartElement) error {

我尝试创建多个几乎相似的xml, 但是元素名称标记有点变化:

<ELEM3_VARIANT_A></ELEM3_VARIANT_A> 
但是如何更改元素名称(如xml名称标记)


使用实现接口的自定义类型

type VarElem struct {
    Name  string
    Value string
}

func (v VarElem) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
    start.Name.Local += v.Name // <- change name of element
    return e.EncodeElement(v.Value, start)
}
类型VarElem结构{
名称字符串
值字符串
}
func(v VarElem)MarshalXML(e*xml.Encoder,start xml.StartElement)错误{

start.Name.Local+=v.Name//非常感谢,这是一个非常好的解决方案!致以最诚挚的问候:-)下面是一个完整的示例,其中包含名称和值:
XMLName: xml.Name{Local: "XMLName"},
<XMLName>
  <ELEM1>hello</ELEM1>
  <ELEM2></ELEM2>
  <ELEM3_VARIANT_A></ELEM3_VARIANT_A>
  <ELEM4></ELEM4>
</XMLName>

<XMLName>
  <ELEM1>hello</ELEM1>
  <ELEM2></ELEM2>
  <ELEM3_VARIANT_B></ELEM3_VARIANT_B>
  <ELEM4></ELEM4>
</XMLName>
package main

import (
    "encoding/xml"
    "fmt"
)

type VariantA struct {
    XMLName xml.Name
    E1      string `xml:"ELEM1"`
    E2      string `xml:"ELEM2"`
    E3      string `xml:"ELEM3_VARIANT_A"`
    E4      string `xml:"ELEM4"`
}


type VariantB struct {
    XMLName xml.Name
    E1      string `xml:"ELEM1"`
    E2      string `xml:"ELEM2"`
    E3      string `xml:"ELEM3_VARIANT_B"`
    E4      string `xml:"ELEM4"`
}


func test(v interface{}) {
    buf, err := xml.MarshalIndent(v, "", "  ")

    if err != nil {
        fmt.Println("error:", err)
    } else {
        fmt.Println(string(buf))
    }
}

func main() {

    test(VariantA {
        XMLName: xml.Name{Local: "XMLName"},
        E1:      "hello",
    })


    test(VariantB {
        XMLName: xml.Name{Local: "XMLName"},
        E1:      "hello",
    })


}
type VarElem struct {
    Name  string
    Value string
}

func (v VarElem) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
    start.Name.Local += v.Name // <- change name of element
    return e.EncodeElement(v.Value, start)
}