前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go xml文件处理

Go xml文件处理

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

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

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

读取xml

示例:

代码语言:txt
复制
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
复制
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
复制
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
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 读取xml
  • 读取递归数据xml
  • 写入xml
  • links
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档