go的结构体转换为xml格式

本文介绍如何在Go语言中将复杂的数据结构转换为XML格式,包括使用结构体标签进行自定义命名,以及如何生成易读的格式化XML。通过两种方法演示了如何将结构体数据转换成XML,并展示了如何使用xml.MarshalIndent函数来美化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本次遇到的问题是我需要将一堆的键值对转换为xml格式,作为body去请求url

interface{}类型转换为xml格式

1.第一种方法

// 定义一个user结构体
type User struct {
	Name string `xml:"name,omitempty"`
	Age int `xml:"age,omitempty"`
}

// 定义一个Blog结构体
type Blog struct {
	Title string `xml:"title,omitempty"`
	Content string `xml:"content,omitempty"`
}

// 在Request结构体中包含上面两个结构体
type Request struct {
	User
	Blog
}

// 新建一个user
user := &User{Name: "张三", Age: 23}

// 将user放到Request结构体中,在结构体的字段中都添加omitempty,在显示的时候就会只显示有值的,无值的就不会显示了,返回值中的<Request>...</Request>是结构体的名字
request := &Request{User: *user}
result, _ := xml.Marshal(request)
fmt.Println(string(result))  // <Request><name>张三</name><age>23</age></Request>

2. 第二种方法

type User struct {
		XMLName   xml.Name `xml:"Request"`
		Name string `xml:"name,omitempty"`
		Age int `xml:"age,omitempty"`
	}

	type Blog struct {
		// 定义类型为xml.Name就不会使用结构体的名字<Blog>,而是自定义的<Request> 
		XMLName   xml.Name `xml:"Request"`
		Title string `xml:"title,omitempty"`
		// content>再来 生成的xml是这样的<content><再来>人之初,性本善</再来></content>,类似于标签套标签
		Content string `xml:"content>再来,omitempty"`
	}


	user := &User{Name: "张三", Age: 23}

	g, _ := xml.Marshal(user)
	fmt.Println(string(g))

	blog := &Blog{Title: "三字经", Content: "人之初,性本善"}
	result, _ := xml.Marshal(blog)
	fmt.Println(string(result))  // <Request><title>三字经</title><content>人之初,性本善</content></Request>

3. 格式化的xml

上述的生成的xml实在是对阅读太不友好,换一个函数试试
xml.MarshalIndent(v interface{}, prefix, indent string)

type Blog struct {
		XMLName   xml.Name `xml:"Request"`
		Title string `xml:"title,omitempty"`
		Content string `xml:"content>再来,omitempty"`
	}

	blog := &Blog{Title: "三字经", Content: "人之初,性本善"}
	result, _ := xml.MarshalIndent(blog, "", "    ")
	fmt.Println(string(result))
//<Request>
//    <title>三字经</title>
//    <content>
//        <再来>人之初,性本善</再来>
//    </content>
//</Request>	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的狮王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值