Go语言 XML生成和解析
前言
XML是指可扩展标记语言(eXtensible MarkupLanguage),它是一种标记语言。它被设计的宗旨是描述数据(XML),而非显示数据(HTML)。
在日常开发中是比较流行的传输和存储数据结构。
Go语言中,我们用xml包的Unmarshal来解析XML文档,MarshalIndent来生成XML文档。
XML文档实例
<?xml version="1.0" encoding="utf-8"?>
<devices version="1"><device><deviceName>智能摄像头</deviceName><deviceCode>100000000001</deviceCode><deviceDate>2020-03-01</deviceDate></device><device><deviceName>智能挖掘机</deviceName><deviceCode>200000000001</deviceCode><deviceDate>2020-03-01</deviceDate></device>
</devices>
定义结构
type Device struct {XMLName xml.Name `xml:"devices"`Version string `xml:"version,attr"`Device []DeviceNode `xml:"device"`Description string `xml:",innerxml"`
}type DeviceNode struct {XMLName xml.Name `xml:"device"`DeviceName string `xml:"deviceName"`DeviceCode string `xml:"deviceCode"`DeviceDate string `xml:"deviceDate"`
}
Tag解释
- "-",字段不会输出
- "name,attr",以name作为属性名,字段值作为输出这个XML元素的属性
- ",attr",以这个结构体struct的字段名作为属性名输出XML元素的属性,name默认是字段名
- ",chardata",输出XML元素为character data而非element。
- ",innerxml",原样输出,不进行常规的编码过程
- ",comment",作为XML注释来输出,不进行编码过程,字段中不能有“--”字符串
- "omitempty",若字段值为空、那么字段不会被输出到XML,空值有:false、0、nil指针,nil接口,任意长度为0的Slice、数组结构、Map结构或者string
生成XML
var o = Device{}o.Device = append(o.Device, DeviceNode{DeviceName: "电脑",DeviceCode: "300000000001",DeviceDate: "2020-01-01",})o.Device = append(o.Device, DeviceNode{DeviceName: "游戏机",DeviceCode: "400000000001",DeviceDate: "2020-01-02",})o.Device = append(o.Device, DeviceNode{DeviceName: "苹果手机",DeviceCode: "500000000001",DeviceDate: "2020-01-03",})resXML, err := xml.MarshalIndent(o, " ", " ")if err != nil {fmt.Printf("marshal xml err :%v\n", err)return}_, _ = os.Stdout.Write([]byte(xml.Header))_, _ = os.Stdout.Write(resXML)
解析XML
file := "./device.xml"fd, err := os.Open(file)if err != nil {fmt.Printf("open file err : %v\n", err)return}defer fd.Close()fileContent, err := ioutil.ReadAll(fd)if err != nil {fmt.Printf("read file err : %v\n", err)return}var device = Device{}err = xml.Unmarshal(fileContent, &device)if err != nil {fmt.Printf("unmarshal err : %v\n", err)return}for idx, node := range device.Device {fmt.Printf("序号:[%d],设备名:[%s],设备编码:[%s],设备日期:[%s]\n",idx, node.DeviceName, node.DeviceCode, node.DeviceDate)}
运行结果
Go语言 XML生成和解析相关推荐
- python中documentelement_python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)...
xml.dom篇 DOM是Document Object Model的简称,XML 文档的高级树型表示.该模型并非只针对 Python,而是一种普通XML 模型.Python 的 DOM 包是基于 S ...
- Xml 格式数据的生成和解析
相关阅读 XML约束 Xml 格式数据的生成和解析 XML解析器 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记 ...
- XML与JSON的生成与解析
1. XML 1.1 XML简介 可标记语言(extensible Markup Language) 特性: XML具有平台无关性,是一门独立的语言 XML具有自我描述性 XML功能: 网络传输文件 ...
- c语言xml解析器libxm2
写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支持多种编程语言:2)LIBXML2库 ...
- Java自定义生成与解析(Dom4J)XML文件
XML(Extensible Markup Language):可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 应用:XML 应用于 web 开发的许多方面, ...
- java发布WCS服务到GeoServer服务器并解析XML生成可下载的WCS服务数据url(2022.2.14)
GeoServer上的WCS服务发布调用及解析生成可下载为Tif的WCSUrl 2022.2.14 所用软件环境(Java.Tomcat.GeoServer.Google Browser.Eclips ...
- boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST
boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型 ...
- wxml报错原因_C#生成、解析xml文件以及处理报错原因
转载自:http://blog.csdn.net/lilinoscar/article/details/21027319 简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数 ...
- 大杂烩 -- 四种生成和解析XML文档的方法详解
基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...
最新文章
- 和日本萌妹一起读深度学习最新论文,阅读难度会降低吗?
- spark里的hbase的ImmutableBytesWritable的打印问题scala
- python对excel增删改查_Python之Excel 优雅操作手法 精选
- 前端学习(3339):ant design中加上icon图标
- strict standards php报错,Bigcommerce:PHP版本升级错误解决办法_PHP教程
- Helm 3 完整教程(十一):Helm 函数讲解(5)日期函数
- 关键字nullable,nonnull,null_resettable,_Null_unspecified详解
- POJ_2258 The settlers of Catan (DFS)
- hadoop 2.7.3 源码编译教程
- Linux nvme驱动分析之用户态接口
- 常用的做网站软件、网站制作软件分享
- Kindle wifi 连接不上的问题
- 思科路由器的双出口nat研究
- Revo RS5025005C00000
- 锐龙r3 4100核显 r3 4100参数 r3 4100评测
- 栈帧详解ebp、esp
- 自然语言处理:问答语料生成词汇表,词转向量(三)
- 解剖学坐标体系(LPS , RAS和LAS)
- 小酷智慧地图3D导览v1.0.82 打卡定位 地图打卡
- 熊猫烧香病毒背后,网络高手对决一个月
热门文章
- web项目怎么连接云服务器,web项目怎么连接云服务器
- html所有页面根的对象,在django中显示来自所有用户的对象,无需登录到html页面...
- 谷歌Android无障碍套件,谷歌为无障碍套件添加盲文键盘:无需额外硬件就能打字...
- 编写python程序、创建名为class的数据库_Python中的元类(metaclass)以及元类实现单例模式...
- php遍历中记录所有,php遍历类中包含的所有元素的方法
- C#Winform调用wsdl接口webservice#http
- 消费流程图_SpringBoot+RabbitMQ ,保证消息100%投递成功并被消费(附源码)
- android开发环境教案,01. Android开发环境教案.pdf
- JAVA异步爬虫_Java 爬虫遇上数据异步加载,试试这两种办法!
- JVM插桩之四:Java动态代理机制的对比(JDK和CGLIB,Javassist,ASM)