如何在没有单独结构的情况下获取xml名称标签变体
我尝试创建多个几乎相似的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 {
<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)
}