golang工具基础——xml、template

go文件

package main 

import (
	"fmt"
	"encoding/xml"
	"os"
	"text/template"
)

type Member struct {
	Name string `xml:"name,attr"`
	Comment string `xml:"comment,attr"`
}

type Struct struct {
	Name string `xml:"name,attr"`
	Comment string `xml:"comment,attr"`
	Members []Member `xml:"member"`
}

type Result struct {
	XMLName xml.Name `xml:"result"`
	Structs []Struct `xml:"struct"`
}

var result = Result{}

func main() {
	
	if !parse() {
		return
	}
	
	if !output() {
		return
	}

	fmt.Print("OK")
}

func parse() bool {
	file, err := os.Open("struct.xml")
	if err != nil {
		fmt.Print(err)
		return false
	}

	var buffer [1024]byte
	n, rerr := file.Read(buffer[0:])
	if rerr != nil {
		fmt.Print(rerr)
		return false
	}

	err = xml.Unmarshal(buffer[0:n], &result)
	if err != nil {
		fmt.Print(err)
		return false
	}

	return true
}

func output() bool {

	file, err := os.Create("Struct.h")
	if err != nil {
		fmt.Print(err)
		return false
	}

	t, err := template.ParseFiles("Struct_h.tpl")  
	if err != nil {
		fmt.Print(err)
		return false
	}

	err = t.Execute(file, result.Structs)  
	if err != nil {
		fmt.Print(err)
		return false
	}
	
	return true
}

xml文件

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<result>

	<struct name="A" comment="a结构">
		<member name="A1" comment="A1注释"/>
		<member name="A2" comment="A2注释"/>
		<member name="A3" comment="A3注释"/>
	</struct>
	
	<struct name="B" comment="b结构">

		<member name="B1" comment="B1注释"/>
		<member name="B2" comment="B2注释"/>
		<member name="B3" comment="B3注释"/>
	</struct>
	
</result>

tpl文件

{{range .}}  
// {{.Comment}}
struct {{.Name}}
{
    {{range .Members}}
    // {{.Comment}}
    uint32_t {{.Name}};
    {{end}}
};
{{end}}

输出

  
// a结构
struct A
{
    
    // A1注释
    uint32_t A1;
    
    // A2注释
    uint32_t A2;
    
    // A3注释
    uint32_t A3;
    
};
  
// b结构
struct B
{
    
    // B1注释
    uint32_t B1;
    
    // B2注释
    uint32_t B2;
    
    // B3注释
    uint32_t B3;
    
};


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值