我正在尝试为 epub 创建一个 toc.ncx (只是一个 XML)文件。在这样的目录中,<navpoint>定义了 s,每个都有一个 id 和一个“播放顺序”。Go模板有什么方法可以简单地计算导航点吗?我想过这样的事情(非工作模板代码){{$counter := 0}}{{define "NAVPOINT"}} {{$counter = $counter + 1}} <navpoint id="{{.}}" playorder="{{$counter}}">{{end}}{{range .TopLevel }} {{template "NAVPOINT" .Id}} {{range .SecondLevel }} {{template "NAVPOINT" .Id}} </navpoint> {{end}} </navpoint>{{end}}示例结构 { TopLevel: [ { Id: "id-a" SecondLevel: [ { Id: "scnd-a" } { Id: "scnd-b" } ] } { Id: "id-b" SecondLevel: [ { Id: "scnd-c" } { Id: "scnd-d" } ] } }这会给我这样的东西 <navpoint id="id-a" playorder="1"> <navpoint id="scnd-a" playorder="2"></navpoint> <navpoint id="scnd-b" playorder="3"></navpoint> </navpoint> <navpoint id="id-b" playorder="4"> <navpoint id="scnd-c" playorder="5"></navpoint> <navpoint id="scnd-d" playorder="6"></navpoint> </navpoint>我想我可以使用模板功能,而不是模板来实现这一点,但不知道如何实现这一点。模板函数可以有计数器吗?
1 回答
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
这是我现在使用的功能:
"navpoint": func() func(...string) string {
i := 0
return func(id ...string) string {
if len(id) < 1 {
return "</navPoint>"
}
i++
return `<navPoint id="` + id[0] + `" playorder"` + strconv.Itoa(i) + `">`
}
},
我在模板中以这种方式使用它:
{{$navpoint := navpoint}}
{{range .TopLevel }}
{{call $navpoint .Id}}
{{range .SecondLevel }}
{{call $navpoint .Id}}
{{call $navpoint}}
{{end}}
{{call $navpoint}}
{{end}}
如果使用 id (XX) 调用“navpoint”,它会给出开始标签<navpoint id="XX" playorder="##">。在没有 id 的情况下调用时,它会给出结束标签</navpoint>
- 1 回答
- 0 关注
- 97 浏览
添加回答
举报
0/150
提交
取消