gpt4 book ai didi

java - 从 Velocity 模板获取占位符列表

转载 作者:太空宇宙 更新时间:2023-11-04 07:39:22 28 4
gpt4 key购买 nike

假设我有一个像这样的 Velocity 模板:

Hi!, my name is ${name} and I'm ${age} years old.

请注意,模板没有循环或条件语句。

我想获得包含这些值的列表

["name", "age"]

我检查了 API,但看起来 Template 类没有用于此目的的方法:https://velocity.apache.org/engine/releases/velocity-1.7/apidocs/org/apache/velocity/Template.html

如何使用速度获取此列表,而无需自己解析模板?

最佳答案

我一直在寻找一种方法来检索 Velocity 模板中使用的所有键的列表。正如评论之一中提到的,您可以实现自己的访问者来运行 Velocity 模板中的所有节点。

这是一个存储模板中遇到的键并随后打印它们的代码片段:

VelocityEngine ve = new VelocityEngine();
Properties props = new Properties();
props.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
props.put("resource.loader", "class");
ve.init(props);
Template t = ve.getTemplate("templates/my-template.vm");

final List<String> keys = new ArrayList<String>();
SimpleNode sn = (SimpleNode)t.getData();
BaseVisitor myVisitor = new BaseVisitor(){
@Override
public Object visit(ASTReference node, Object data){
String key = node.literal();
keys.add(key);
return super.visit(node, data);
}
};
sn.jjtAccept(myVisitor, new Object());
for (String key : keys) {
System.out.println(key);
}

例如,如果您的 Velocity 模板具有以下内容:

<p>Dear ${user.name}, the ordered package has been sent to ${user.address}.</p>

将打印以下内容:

${user.name}
${user.address}

关于java - 从 Velocity 模板获取占位符列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16301171/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com