给定一个解析模板,我们如何检索所有操作的列表在其中定义?
请注意,我们将使用的方法 Template.Tree 不适合外部使用。它的导出仅用于 html/template 包的内部工作。在代码中依赖它可能会导致包的未来版本中出现意外行为。
已解析的模板在内部表示为包含各种节点的树 (parse.Tree)。每个节点代表模板中的一个特定元素,例如文本、字段、函数调用等。
为了查找操作,我们将递归遍历这棵树,查找 parse.NodeAction 类型的节点。这些节点代表非控制操作,例如字段评估。
import ( "fmt" "html/template" "text/template/parse" ) func ListTemplateFields(t *template.Template) []string { return listNodeFields(t.Tree.Root, nil) } func listNodeFields(node parse.Node, results []string) []string { if node.Type() == parse.NodeAction { results = append(results, node.String()) } if listNode, ok := node.(*parse.ListNode); ok { for _, n := range listNode.Nodes { results = listNodeFields(n, results) } } return results }
t := template.Must(template.New("example").Parse(`{{ .name }} {{ .age }}`)) fields := ListTemplateFields(t) fmt.Println(fields)
[{{.name}} {{.age}}]
以上是如何从已解析的 HTML 模板中提取所有操作?的详细内容。更多信息请关注PHP中文网其他相关文章!