jdom编写xml自动缩进_Golang操作XML神器etree

golang如何解析xml数据?相信大家的第一反应就是使用标准包encoding/xml,但是这往往需要我们提前定义好一个结构体,然后通过xml.Unmarshal将数据写入到对应的结构体。一旦xml定义起来将非常难受,今天小编给大家推荐一个超好用的xml的第三方类库可直接从xml字符串或者xml文件中读取相应的节点。

一、安装(go module)

go get github.com/beevik/etree

版本:

  • v1.1.0 – Feb 2, 2019
  • v1.0.1 – May 6, 2018
  • v1.0.0 – Aug 9, 2017

二、特性

  • 将XML文档表示为元素树,以便于遍历。
  • 从顶级节点开始,导入,序列化,修改或创建XML文档。
  • 向文件,字节切片,字符串和io接口读写XML。
  • 使用类似XPath的轻量级查询API方式,执行简单或复杂的搜索
  • 使用空格或制表符自动缩进XML,以提高可读性。
  • 建立在go标准包encoding / xml基础之上

三、基本使用

1.写入xml文件

package mainimport ("fmt""github.com/beevik/etree")func main() {doc := etree.NewDocument()doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)doc.CreateProcInst("xml-stylesheet", `type="text/xsl" href="style.xsl"`)// 设置节点students := doc.CreateElement("Students")tom := students.CreateElement("Student")tom.CreateAttr("name", "tom")tom.CreateAttr("age", "20")tom.CreateAttr("gender", "male")lucy := students.CreateElement("Student")lucy.CreateAttr("name", "lucy")lucy.CreateAttr("age", "18")lucy.CreateAttr("gender", "female")// 设置缩进doc.Indent(4)if err := doc.WriteToFile("./students.xml"); err != nil {fmt.Println("写入失败, reason:" + err.Error())}}
416e436c9bcaefdad54e9d5487bd859c.png

2.从文件读取

我就直接读取刚刚生成的studnet.xml

doc := etree.NewDocument()if err := doc.ReadFromFile("./students.xml"); err != nil {fmt.Println("读取失败, reason:" + err.Error())}// 读取Students下面的所有子节点students := doc.SelectElement("Students").ChildElements()if len(students) > 0 {for _, v := range  students {      // 获取xml中节点的name属性值name := v.SelectAttr("name").Valueage := v.SelectAttr("age").Valuegender := v.SelectAttr("gender").Valuefmt.Printf("%s: 性别为:%s, 年龄为: %s ", name, gender, age)}}

etree的功能非常强大,我们还可以通过RemoveAttr、RemoveChild等移除节点,节点属性。感兴趣的同学可以去pkg.go.dev查看官方的文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值