XML编码解码

结构体类型数据转xml字符串

type Plant struct {
	XMLName xml.Name `xml:"plant"`
	ID      int      `xml:"id,attr"`
	Name    string   `xml:"name"`
	Origin  []string `xml:"origin"`
}
coffee := &Plant{
	ID:   27,
	Name: "Coffee",
}
coffee.Origin = []string{"Ethiopia", "Brazil"}
out, _ := xml.MarshalIndent(coffee, "->", "	")
fmt.Println(string(out))

-><plant id=“27”>
-> <name>Coffee</name>
-> <origin>Ethiopia</origin>
-> <origin>Brazil</origin>
-></plant>

也可以添加头部描述

out, _ := xml.MarshalIndent(coffee, "", "	")
fmt.Println(xml.Header + string(out))

<?xml version=“1.0” encoding=“UTF-8”?>
<plant id=“27”>
<name>Coffee</name>
<origin>Ethiopia</origin>
<origin>Brazil</origin>
</plant>

结构体类型嵌套数据转xml字符串

type Plant struct {
	XMLName xml.Name `xml:"plant"`
	ID      int      `xml:"id,attr"`
	Name    string   `xml:"name"`
	Origin  []string `xml:"origin"`
}

type Nesting struct {
	XMLName xml.Name `xml:"nesting"`
	Plants  []*Plant `xml:"parent>child>plant"`
}
coffee := &Plant{
	ID:   27,
	Name: "Coffee",
}
coffee.Origin = []string{"Ethiopia", "Brazil"}

tomato := &Plant{
	ID:   81,
	Name: "Tomato",
}
tomato.Origin = []string{"Mexico", "California"}

nesting := &Nesting{}
nesting.Plants = []*Plant{coffee, tomato}

out, _ := xml.MarshalIndent(nesting, "", "	")
fmt.Println(string(out))

<nesting>
<parent>
<child>
<plant id=“27”>
<name>Coffee</name>
<origin>Ethiopia</origin>
<origin>Brazil</origin>
</plant>
<plant id=“81”>
<name>Tomato</name>
<origin>Mexico</origin>
<origin>California</origin>
</plant>
</child>
</parent>
</nesting>

xml字符串转结构体类型数据

type Plant struct {
	XMLName xml.Name `xml:"plant"`
	ID      int      `xml:"id,attr"`
	Name    string   `xml:"name"`
	Origin  []string `xml:"origin"`
}

func (p Plant) String() string {
	return fmt.Sprintf("Plant id=%v, name=%v, origin=%v", p.ID, p.Name, p.Origin)
}
data := []byte(`
<plant id="27">
	<name>Coffee</name>
	<origin>Ethiopia</origin>
	<origin>Brazil</origin>
</plant>
`)
var p Plant
if err := xml.Unmarshal(data, &p); err != nil {
	panic(err)
}
fmt.Println(p)

Plant id=27, name=Coffee, origin=[Ethiopia Brazil]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值