Go XML编组技术问询:如何将属性从父元素移至子元素?
解决方案:调整结构体嵌套与标签绑定
当然可以轻松搞定这个问题!你当前的代码把abc属性直接绑定到了<root>对应的foo结构体上,所以编组时属性会默认出现在根元素上。要把属性移到<element>子元素,只需要为子元素单独定义结构体,并将属性绑定到这个子结构体即可。
修改后的完整代码
package main import ( "encoding/xml" "fmt" "os" ) // 为<element>子元素定义专属结构体,承载它的属性 type element struct { XMLName xml.Name `xml:"element"` Abc string `xml:"abc,attr"` // 如果需要给<element>添加文本内容,可添加以下字段 // Content string `xml:",chardata"` } type foo struct { XMLName xml.Name `xml:"root"` Element element `xml:"element"` // 在根结构体中嵌套element子结构体 } func main() { f := foo{} a, err := xml.MarshalIndent(f, "", " ") if err != nil { fmt.Println(err) os.Exit(1) } fmt.Println(string(a)) }
关键说明
- 子元素结构体拆分:新增的
element结构体专门对应XML里的<element>标签,把abc,attr标签绑定到这个结构体的Abc字段,确保属性归属到子元素上。 - 根结构体调整:
foo结构体的Element字段从字符串类型改为element结构体类型,保留xml:"element"标签保证生成正确的子元素名称。
运行结果
执行代码后会输出你期望的XML格式:
<root> <element abc=""></element> </root>
如果后续需要给<element>添加文本内容,只需在element结构体中添加Content string xml:",chardata"字段,赋值后就能生成
内容的提问来源于stack exchange,提问作者topskip
相关产品推荐
相关产品推荐

