ホームページ > バックエンド開発 > 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート