golang xml 解析

为什么要搞这个玩意。我准备做一个golang的留言板。也不打算自己用框架去写了。准备自己设计一版出来,读取的话我这边只是单单的做读取mysql 配置信息用的

下面看我的 xml 格式 以及对应的解析代码

test.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Db>
 	<db_host>127.0.0.1</db_host>
  	<db_name>bbs</db_name>
 	<db_user>root</db_user>
 	<db_pass>123456</db_pass>
</Db>

test.go

package main

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

type Conf struct {
	Db `xml:"Db"`
}

type Db struct {
	Db_host string `xml:"db_host"`
	Db_name string `xml:"db_name"`
	Db_user string `xml:"db_user"`
	Db_pass string `xml:"db_pass"`
}

func main() {
	file_data, err := file_open("test.xml")
	if err != nil {
		fmt.Println(err.Error())
		os.Exit(0)
	}
	tpl := Conf{}
	//根据传递的构造体解析 切记 第二个参数传递的是指针
	tpl_err := xml.Unmarshal(file_data, &tpl)
	if tpl_err != nil {
		fmt.Println("tpl err :", tpl_err)
		os.Exit(0)
	}
	fmt.Println(tpl)

}

func file_open(file_name string) ([]byte, error) {
	//定义变量
	var (
		open               *os.File
		file_data          []byte
		open_err, read_err error
	)
	//打开文件
	open, open_err = os.Open(file_name)
	if open_err != nil {
		return nil, open_err
	}
	//关闭资源
	defer open.Close()

	//读取所有文件内容
	file_data, read_err = ioutil.ReadAll(open)
	if read_err != nil {
		return nil, read_err
	}
	return file_data, nil
}


切记 如果使用 struct  xml 格式 第一层必须 与构造体名称相同

比如下面的代码

type Conf struct {
	Host    string `xml:"server_host"` //运行域名
	Port    int64  `xml:"server_port"` //运行端口
	AppName string `xml:"app_name"`    //项目名称
	RunMode string `xml:"run_mode"`    //运行模块

	TplPATH string `xml:"tpl_path"` //模板路径
	TplExt  string `xml:"tpl_ext"`  //模板后缀
	Db      confDB
}
错误的格式 如果不带对应的 构造体为第一层 他不会报错也不会解析数据到对应的构造体
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
	<server_host>127.0.0.1</server_host>
	<server_port>8080</server_port>
	<tpl_ext>html</tpl_ext>
正确的格式
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Conf>
	<server_host>127.0.0.1</server_host>
	<server_port>8080</server_port>
	<tpl_ext>html</tpl_ext>
</Conf>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一名路过的小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值