关闭

golang xml 解析

标签: gogoLangxml读取
1292人阅读 评论(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网站的观点或立场

golang的xml解析

Shanghai_VPN         127.0.0.1                 Beijing_VPN       ...
  • fyxichen
  • fyxichen
  • 2015-08-06 15:50
  • 2322

golang动态解析xml

package main import ( "encoding/xml" "fmt" "mahonia" "os" "strconv" "text/template"...
  • esrrhs
  • esrrhs
  • 2014-03-24 22:49
  • 1299

golang xml marshal对应的struct两种表示方法

1.xml的节点名字就是struct成员的名字,如:Project.ItemGroup,成员的类型名不影响 //vcxproj.filters type Project struct { Tools...
  • varding
  • varding
  • 2015-05-06 13:35
  • 3853

golang解析xml示例

V0.1 2017-08-9 17:30:30 UTC8 123456554687864654 ...
  • u014132751
  • u014132751
  • 2017-08-09 17:20
  • 106

golang解析xml,去掉重复项

package main import ( "encoding/xml" "fmt" "mahonia" "os" "strconv" "text/template"...
  • esrrhs
  • esrrhs
  • 2014-03-25 22:03
  • 1055

[Golang] 从零开始写Socket Server(4):将运行参数放入配置文件(XML/YAML)

为了将我们写好的Server发布到服务器上,就要将我们的代码进行build打包,这样如果以后想要修改一些代码的话,需要重新给代码进行编译打包并上传到服务器上。     显然,这么做过于繁琐。。。因此...
  • ahlxt123
  • ahlxt123
  • 2015-08-25 07:13
  • 3232

golang工具基础——xml、template

go文件 package main import ( "fmt" "encoding/xml" "os" "text/template" ) type Member struct { ...
  • esrrhs
  • esrrhs
  • 2014-01-15 21:52
  • 1087

golang中结构体转成xml格式

本文主要介绍结构体与xml格式的字符串进行相互转换,Go自带xml包,所以进行格式转换非常的方便。   一、结构体转成xml格式 1、转成不需要排版的xml格式字符串,可直接使用Marshal(...
  • skh2015java
  • skh2015java
  • 2017-07-01 17:53
  • 504

golang解析数字证书

  • 2017-05-20 16:44
  • 967KB
  • 下载

golang sql连接池的实现解析

golang的”database/sql”是操作数据库时常用的包,这个包定义了一些sql操作的接口,具体的实现还需要不同数据库的实现,mysql比较优秀的一个驱动是:github.com/go-sql...
  • qp2624
  • qp2624
  • 2017-01-09 18:26
  • 5463
    个人资料
    • 访问:166906次
    • 积分:3821
    • 等级:
    • 排名:第9723名
    • 原创:218篇
    • 转载:22篇
    • 译文:1篇
    • 评论:10条
    文章分类
    最新评论