首页 > 后端开发 > Golang > 如何从已解析的 HTML 模板中提取所有操作?

如何从已解析的 HTML 模板中提取所有操作?

Barbara Streisand
发布: 2024-12-26 02:58:10
原创
835 人浏览过

How Can I Extract All Actions from a Parsed HTML Template?

如何检查嵌入操作的解析模板

问题陈述

给定一个解析模板,我们如何检索所有操作的列表在其中定义?

解决方案

免责声明:内部 API 使用

请注意,我们将使用的方法 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板