Maison > développement back-end > Golang > Comment puis-je extraire toutes les actions d'un modèle HTML analysé ?

Comment puis-je extraire toutes les actions d'un modèle HTML analysé ?

Barbara Streisand
Libérer: 2024-12-26 02:58:10
original
892 Les gens l'ont consulté

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

Comment inspecter un modèle analysé pour les actions intégrées

Énoncé du problème

Étant donné un modèle analysé, comment pouvons-nous récupérer une liste de toutes les actions défini en son sein ?

Solution

Avertissement : API interne Utilisation

Notez que la méthode que nous utiliserons, Template.Tree, n'est pas destinée à un usage externe. Il est exporté uniquement pour le fonctionnement interne du package html/template. S'en fier dans votre code peut entraîner un comportement inattendu dans les futures versions du package.

Procédure pas à pas

Un modèle analysé est représenté en interne sous la forme d'un arbre (parse.Tree) comprenant différents nœuds. Chaque nœud représente un élément spécifique dans le modèle, tel que du texte, des champs, des appels de fonction, etc.

Pour trouver les actions, nous parcourrons cet arbre de manière récursive, à la recherche de nœuds de type parse.NodeAction . Ces nœuds représentent des actions sans contrôle, telles que des évaluations sur le terrain.

Mise en œuvre

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
}
Copier après la connexion

Exemple d'utilisation

t := template.Must(template.New("example").Parse(`{{ .name }} {{ .age }}`))
fields := ListTemplateFields(t)
fmt.Println(fields)
Copier après la connexion

Sortie

[{{.name}} {{.age}}]
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal