首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go xml文件处理

Go xml文件处理

原创
作者头像
孤烟
修改于 2022-03-19 06:49:52
修改于 2022-03-19 06:49:52
7780
举报
文章被收录于专栏:golang开发笔记golang开发笔记

在开发中会常遇到xml数据序列化和反序列化,这里我们介绍go语言处理xml数据。

encoding/xml 包实现了一个简单的xml 1.0解析器,可以理解xml名称空间。

读取xml

示例:

代码语言:txt
AI代码解释
复制
package main

import (
	"encoding/xml"
	"fmt"
)

type Note struct {
	XMLName  xml.Name `xml:"note"`
	To string `xml:"to"`
	From string `xml:"from"`
	Heading string `xml:"heading"`
	Body string `xml:"body"`
	Files FilesArr `xml:"files"`
}
type FilesArr struct {
	Flag string `xml:"flag,attr"` // 读取flag属性
	User []string `xml:"user"` // 读取user数组
}
func main()  {
	//读取xml文件到缓存中,返回[]byte
	//xmlDoc, err := ioutil.ReadFile("test.xml")
	//if err != nil {
	//	fmt.Println("xml文件读取失败!")
	//	return
	//}
	//fmt.Println(string(xmlDoc))
	xmlDoc := `<?xml version="1.0" encoding="UTF-8"?>
                <note>
                  <to>Tony</to>
                  <from>jack</from>
                  <heading>title</heading>
                  <body>love you</body>
                  <files flag="true">
					<user>zhang</user>
					<user>li</user>
                  </files>
                </note>`
	note := Note{}
	err := xml.Unmarshal([]byte(xmlDoc), &note)
	if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println(note)
	}
}

读取递归数据xml

代码语言:txt
AI代码解释
复制
package main

import (
	"encoding/xml"
	"fmt"
)
type ListItem struct {
	Name string `xml:"name"`
	List []ListItem `xml:"list"`
}

func main()  {
	//读取xml文件到缓存中,返回[]byte
	//xmlDoc, err := ioutil.ReadFile("test.xml")
	//if err != nil {
	//	fmt.Println("xml文件读取失败!")
	//	return
	//}
	//fmt.Println(string(xmlDoc))
	xmlDoc := `<?xml version="1.0" encoding="UTF-8"?>
                <list>
                  <name>zhang</name>
					<list>
						<name>li</name>
					</list>
                </list>`
	list := ListItem{}
	err := xml.Unmarshal([]byte(xmlDoc), &list)
	if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println(list)
	}
}

写入xml

示例:

代码语言:txt
AI代码解释
复制
package main

import (
	"encoding/xml"
	"fmt"
	"io/ioutil"
)

type Note struct {
	XMLName  xml.Name `xml:"note"`
	To string `xml:"to"`
	From string `xml:"from"`
	Heading string `xml:"heading"`
	Body string `xml:"body"`
	Files FilesArr `xml:"files"`
}
type FilesArr struct {
	Flag string `xml:"flag,attr"` // 读取flag属性
	User []string `xml:"user"` // 读取user数组
}
func main()  {
	user:=[]string{"zhang","li"}
	files:=FilesArr{Flag: "true",User: user}
	note:=Note{
		To: "tony",
		From: "jack",
		Heading: "title",
		Body: "love you",
		Files:files,
	}
	xmlContent,err:=xml.Marshal(note)
	if	err!=nil{
		fmt.Println(err)
	}
	fmt.Println(string(xmlContent))
	//写入demo.xml
	err=ioutil.WriteFile("demo.xml", xmlContent, 0666)
	if err!=nil{
		fmt.Println(err)
	}
}

###写入递归数据

代码语言:txt
AI代码解释
复制
package main

import (
	"encoding/xml"
	"fmt"
	"io/ioutil"
)

type ListItem struct {
	XMLName  xml.Name `xml:"list"`
	Name string `xml:"name"`
	List []ListItem `xml:"list"`
}

func main()  {
	list:=ListItem{Name: "li",List: nil}
	lists:=ListItem{Name: "zhang"}
	l := make([]ListItem,0)
	lists.List=append(l,list)
	xmlContent,err:=xml.Marshal(lists)
	if	err!=nil{
		fmt.Println(err)
	}
	fmt.Println(string(xmlContent))
	//写入demo.xml
	err=ioutil.WriteFile("demo.xml", xmlContent, 0666)
	if err!=nil{
		fmt.Println(err)
	}

}

links

https://studygolang.com/pkgdoc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go解析xml,Go xml struct ,Go xml 转数组
项目中使用到Go,两天看文档,一周出产品,第一次体验Go来开发,虽然写起代码很舒服,但是遇到xml转换是真的麻烦,没有php开发快啊,哈哈。不过Go是真的值得学习。先看下xml转结构体。
高老师
2023/06/18
7890
006-golang中XML文件的处理
data),那么,字符数据会被累加到struct中第一个有tag为”,chardata”的字段。struct字段的类型可以是string或[]byte。如果没有这样的字段,字符数据会被丢弃。如上面的Interests可以再定义一个类型Interest: type Interest struct { Inter string xml:”,chardata” } Interests 中相应的改为:Interest []Interest 当然这个例子中这种方式有些啰嗦。
上善若水.夏
2018/09/28
2.5K0
go对xml操作
XMLName xml.Name `xml:"servers"` //这里好像是固定字段必须这么写
公众号-利志分享
2022/04/25
4820
使用golang解析yaml、json、xml文件
YAML(YAML 不是标记语言)是一种人类可读的数据序列化语言。它通常用于配置文件,但也用于数据存储或传输。YAML 本身支持三种基本数据类型:标量(例如字符串、整数和浮点数)、列表和映射(字典/哈希)。我们使用 yaml.v3 包来解析yaml文件
没有故事的陈师傅
2021/10/19
12.3K1
golang的xml、json解析
xml golang的xml处理主要应用Unmarshal、Marshal方法实现,解析一个xml到struct如下,首先是xml文件: <?xml version="1.0" encoding="u
用户1141560
2017/12/26
3.2K0
golang的xml、json解析
go语言学习-xml 解析
Xml 做为一种平台无关的数据交换和信息传递技术应用十分广泛。如在 WebService 中 使用 XML 将数据编码成 SOAP 消息。很多接口也使用 XML 来传递数据。
solate
2019/07/22
1K0
使用 Go 开发 Prometheus Exporter
Exporter 是 Prometheus 监控的核心,如果你遇到一些应用不存在相应的 Exporter,那么我们可以自己去编写 Exporter。下面我们简单介绍如何使用 Golang 来快速编写一个 Exporter。
CNCF
2020/11/09
8.3K0
使用 Go 开发 Prometheus Exporter
Golang深入浅出之-XML处理在Go语言中的实现:encoding/xml包
在现代软件开发中,XML(eXtensible Markup Language)作为一种通用的数据交换格式,依然扮演着重要角色。Go语言通过其标准库encoding/xml提供了丰富的XML处理功能,支持数据的序列化(编码)与反序列化(解码)。本文将深入浅出地探讨Go语言中XML处理的原理、常见问题、易错点及其避免策略,并通过具体代码示例加以说明。
Jimaks
2024/04/29
1.3K0
Go程序例子(55):XML
用户11078756
2025/01/17
850
Go程序例子(55):XML
Go-标准库-encoding(二)
XML(Extensible Markup Language)是一种可扩展的标记语言,用于数据交换和存储。Go 标准库中的 encoding/xml 包提供了 XML 数据的编码和解码功能。
堕落飞鸟
2023/04/22
3050
3分钟带你通过 Go 语言实现 PDF 转 Word !
5、在main.go同级目录下创建文件夹readhtml,在文件夹中定义文件readhtml.go,内容如下:
小锟哥哥
2023/09/13
7970
3分钟带你通过 Go 语言实现 PDF 转 Word !
xml解析航线文件kmz-goland
WPML 是WayPointMarkupLanguage 的缩写,即航线文件格式标准。WPML 航线文件格式标准基于 KML(Keyhole Markup Language)的定义进行扩展。WPML 航线文件遵循 KMZ 归档要求,所有航线文件以 “.kmz” 后缀结尾。WPML 航线文件格式标准作为航线数字资产的载体
王宝
2025/02/05
3970
虚拟机自动化注意了
使用开源项目:github.com/vmware/govmomi 来实现虚拟机自动化部署流程
heidsoft
2022/01/11
4750
虚拟机自动化注意了
go xml转换成正常的结构体数据
贵哥的编程之路
2024/03/18
2450
go xml转换成正常的结构体数据
Go语言Tips
转型到Go以后,因为语言的不熟悉,以往很常见的一些操作有时候也需要去Google一下。这里将一些结果记录下来,方便日后查阅。
张子阳
2018/09/30
9940
go语言微信公众号开发后台接口封装
业余时间做了个有意思的小功能,每天早上7点准时给发天气预报,每晚8点发布一条英语说说,提醒自己不能忘记学习。
杨永贞
2020/08/04
2.2K0
golang微信支付服务端
一般来说,使用golang主要还是写服务端。所以本文主要讲golang在处理微信移动支付的服务端时的统一下单接口和支付回调接口,以及查询接口。 微信支付流程 下图是微信官网的支付流程描述: 图中红色部分就是微信支付中,我们的系统包括app,后台需要参与的流程。 其中需要后台也就是Server需要参与的流程有三个: 1. 统一下单并返回客户端 2. 异步通知结果回调处理 3. 调用微信支付查询接口 微信所有的接口都是以http RESTFul的API来提供,所以对于server而言其实就是
李海彬
2018/03/27
5.4K2
golang微信支付服务端
Golang框架Gin入门实战--(5)Get、Post以及动态路由转值、Get Post数据解析到结构体、Post Xml数据解析到结构体
此篇文章内容基于上篇文章继续修改Golang框架Gin入门实战–(4)HTML模板渲染以及模板语法 自定义模板函数 静态文件服务(下) main.go
互联网-小阿宇
2022/11/21
1.2K0
golang常用的http请求操作
之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的通过golang发起的GET请求以及POST请求的代码例子
coders
2019/09/29
6.2K0
腾讯技术团队出品的《面向开发人员梳理的代码安全指南-Go安全指南》
使用"net/http"下的方法http.Get(url)、http.Post(url, contentType, body)、http.Head(url)、http.PostForm(url, data)、http.Do(req)时,如变量值外部可控(指从参数中动态获取),应对请求目标进行严格的安全校验。
公众号: 云原生生态圈
2021/09/26
1.3K0
相关推荐
Go解析xml,Go xml struct ,Go xml 转数组
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档