当前位置:首页 > 大杂烩 > 正文内容

Go解析xml,Go xml struct ,Go xml 转数组

高老师5年前 (2021-11-28)大杂烩1344

项目中使用到Go,两天看文档,一周出产品,第一次体验Go来开发,虽然写起代码很舒服,但是遇到xml转换是真的麻烦,没有php开发快啊,哈哈。不过Go是真的值得学习。先看下xml转结构体。

文件book.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore name="新华书店">
    <book category="CHILDREN">
        <title>Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="WEB">
        <title>Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
</bookstore>

解析xml的代码如下,代码即文档

package main

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

// bookMap 定义xml中的book元素映射
type bookMap struct {
   XMLName xml.Name `xml:"book"`
   Title   string   `xml:"title"`
   Author  string   `xml:"author"`
   Year    string   `xml:"year"`
   Price   float64  `xml:"price"`
}

// xmlMap 定义xml总映射
type xmlMap struct {
   XMLName       xml.Name  `xml:"bookstore"` // 第一个根节点 , 每一个结构体一个xml.name
   BookStoreName string    `xml:"name,attr"` // 第一个根节点的属性值是name
   BookStruct    []bookMap `xml:"book"`      // 每一个book元素,遇到数组类型需要新增加一个结构体来映射,例如bookMap结构体
}

func main() {
   // 定义xml文件位置
   xmlFile := "book.xml"

   // 读取xml文件内容
   xmlContent, _ := ioutil.ReadFile(xmlFile)

   // 定义接收xml映射的结构体
   var xmlReceiveMap xmlMap
   err := xml.Unmarshal(xmlContent, &xmlReceiveMap)
   if err != nil {
      fmt.Println(err)
      return
   }

   // 输出书店名称
   fmt.Println("书店名称" + xmlReceiveMap.BookStoreName)

   // 循环输出每条记录
   for index, book := range xmlReceiveMap.BookStruct {
      fmt.Println(index, book)
   }
}

貌似xml有多层就得定义几层结构体,每层结构体都有1个XMLname,有点累

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/607.html

分享给朋友:

“Go解析xml,Go xml struct ,Go xml 转数组” 的相关文章

PHP安装mongodb扩展

PHP安装mongodb扩展

在安装之前我们先看看官方给出的依赖关系.首先是dll文件和mongodb软件的依赖关系然后是PHP文件和dll的依赖关系我的是phpstudy的集成环境PHP5.4.45 NTS+Apache+Mysql【一】.安装mongodb3.0软件对比依赖关系下载mongodb3.0.msi软件,完整名称:...

Git推送文件到远程仓库

Git推送文件到远程仓库

1.远程仓库的协作模式开发者把自己最新的版本推到线上仓库,同时把线上仓库的最新代码,拉到自己本地即可2.注册git帐号国外: http://www.github.com国内: http://git.oschina.net2.在码云创建项目,不要初始化readmegit push https://gi...

Git从远程仓库更新文件

Git从远程仓库更新文件

 git   pull  https://git.oschina.net/392223903/learn.git   master   换为您的git地址...

C# md5加密,C# md5加密代码

C# md5加密,C# md5加密代码

public static string GetMD5(string str) {     //创建MD5对象     MD5 md5 = MD5.C...

IE浏览器无法显示此页解决方案

IE浏览器无法显示此页解决方案

方案1.IE浏览器"无法显示此页"的解决办法(1).按下Win+R键打开运行,输入netsh winsock reset,回车;(2).重启即可. 方案2.IE浏览器"无法显示此页"的解决办法 (1).设置-连接-局域网设置-自动检测设置开...

redis安装教程

redis安装教程

1.文件redis-2.6.14.tar.gz的上传 /home/john/创建rdtar文件夹 上传redis-2.6.14.tar.gz至rdtar文件夹  2.解压文件  cd /home/john/rdtar tar &n...