使用Java进行模板处理

时间:2010-09-23 12:21:29

标签: java pattern-matching template-engine

我们有一个需要使用Java处理的电子邮件模板。我们必须用实际值替换模板中的变量。我们能够使用模式匹配来实现这一点,即;通过搜索特定模式的模板并将其替换为实际值。 现在我们需要在XML文件中有条件。例如

$if($subject!=null)
 sample subject
$endif

我们也需要检查这个条件。 subject是一个需要重新定义其值的变量。  我们不允许使用Velocity模板处理器。

请建议实现此方法的最佳方法。有必要解析它的方法,比如在第一个解析中应用变量值,然后在第二个解析中检查逻辑。如果有人能提供宝贵的建议,将会有很大的帮助。

2 个答案:

答案 0 :(得分:1)

我从未亲自使用它,但StringTempate(http://www.stringtemplate.org/)是Velocity的公平替代品。实际上有人说它更好。

答案 1 :(得分:0)

如果你不能使用Velocity,你可能会对other template processors感兴趣。我在一些项目中成功使用了FreeMarker

如果通用模板是基于XML的,则可以使用带参数的XSLT转换来表达此模板。您可能会获得更多支持。

在此之后,如果您真的想要这么做,您可以使用词法分析器和解析器(例如JFlexCUP)构建自己的模板处理器。这就是说,在您的示例中,您对两个关键字($$if)和变量($endif)使用$subject表示法。虽然原则上没有任何问题,但可能更容易为两种类型提出不同的符号,以使词法分析器更容易(更少的例外/保留字)。更好的分隔符可以帮助区分实际内容和模板指令。