关闭

golang xml 解析

标签: gogoLangxml读取
523人阅读 评论(0) 收藏 举报
分类:

为什么要搞这个玩意。我准备做一个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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:98662次
    • 积分:3106
    • 等级:
    • 排名:第11209名
    • 原创:213篇
    • 转载:16篇
    • 译文:1篇
    • 评论:3条
    文章分类
    最新评论