Wie können wir bei einer gegebenen geparsten Vorlage eine Liste aller Aktionen abrufen? darin definiert?
Beachten Sie, dass die von uns verwendete Methode Template.Tree nicht für die externe Verwendung gedacht ist. Es wird ausschließlich für die interne Funktionsweise des Pakets html/template exportiert. Wenn Sie sich in Ihrem Code darauf verlassen, kann dies zu unerwartetem Verhalten in zukünftigen Versionen des Pakets führen.
Eine geparste Vorlage wird intern als Baum (parse.Tree) dargestellt, der verschiedene Knoten umfasst. Jeder Knoten stellt ein bestimmtes Element innerhalb der Vorlage dar, z. B. Text, Felder, Funktionsaufrufe usw.
Um die Aktionen zu finden, durchqueren wir diesen Baum rekursiv und suchen nach Knoten vom Typ parse.NodeAction . Diese Knoten stellen nicht-kontrollierende Aktionen dar, wie z. B. Feldauswertungen.
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}}]
Das obige ist der detaillierte Inhalt vonWie kann ich alle Aktionen aus einer geparsten HTML-Vorlage extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!