這是一個建立於
的文章,其中的資訊可能已經有所發展或是發生改變。
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]byten, 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; };