为了账号安全,请及时绑定邮箱和手机立即绑定

将结构数组编组为不带父标签的 xml

将结构数组编组为不带父标签的 xml

Go
ibeautiful 2023-07-31 16:01:39
我正在尝试将带有数组的 go 结构封送到xml中。在这个数组中,我需要为每个元素提供一个属性和一个值。我不需要将其放在父xml标记内。我有下面的代码。package mainimport (    "encoding/xml"    "fmt"    "os")func main() {    type Person struct {        XMLName   xml.Name `xml:"person"`        Id        int      `xml:"id,attr"`        FirstName string    }    a := &Person{       Id: 13,       FirstName: "John",    }    b := &Person{       Id: 14,       FirstName: "Doe",    }    x := []*Person{}    x = append(x, a)    x = append(x, b)    enc := xml.NewEncoder(os.Stdout)    enc.Indent("  ", "    ")    if err := enc.Encode(x); err != nil {        fmt.Printf("error: %v\n", err)    }}它产生以下输出。<person id="13">  <FirstName>John</FirstName></person><person id="14">  <FirstName>Doe</FirstName></person>但我需要按如下方式进行。<person id="13">John</person><person id="14">Doe</person>非常感谢对此的任何帮助。我可以用 go 来做这个吗?
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

只需将xml:",chardata"标签添加到FirstName字段即可:


package main


import (

    "encoding/xml"

    "fmt"

    "os"

)


func main() {

    type Person struct {

        XMLName   xml.Name `xml:"person"`

        ID        int      `xml:"id,attr"`

        FirstName string   `xml:",chardata"`

    }


    a := &Person{

        ID:        13,

        FirstName: "John",

    }

    b := &Person{

        ID:        14,

        FirstName: "Doe",

    }

    x := []*Person{}

    x = append(x, a)

    x = append(x, b)


    enc := xml.NewEncoder(os.Stdout)

    enc.Indent("  ", "    ")

    if err := enc.Encode(x); err != nil {

        fmt.Printf("error: %v\n", err)

    }

}


输出:


<person id="13">John</person>

<person id="14">Doe</person>


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信