golang工具基础——xml、template

esrrhs · · 2236 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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;
    
};



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:esrrhs

查看原文:golang工具基础——xml、template

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2236 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传