2010-09-23 78 views
0

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

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

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

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

+1

如果您不允许使用Velocity,是否允许使用其他模板处理器? – Bruno 2010-09-23 12:24:56

回答

0

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

如果您的常规模板是基于XML的,则可以使用带参数的XSLT转换来表示此模板。为此,您可能会获得更多支持。在此之后,如果您真的想要这么做,您可以使用词法分析器和解析器(例如JFlexCUP)来构建您自己的模板处理器。这就是说,在你的例子中,你对这两个关键字($if$endif)和变量($subject)使用$表示法。虽然原则上没有错,但为这两种类型提供不同的符号可能会更容易,从而使词法分析器变得更加简单(更少的例外/保留字)。更好的分隔符将实际内容与模板指令区分开来会有所帮助。

+0

嗨布鲁诺,我们不允许使用任何开源模板处理器。 – Swapna 2010-09-23 13:33:02

+1

@Apps,是家庭作业还是真正的项目?这是一个授权问题吗?您仍然有使用J2SE 5及更高版本附带的JAXP的XSLT选项(尽管严格来说您可能会发现它是OpenJDK中的开源代码)。除此之外,如果您需要演示一些手动工作,JFlex/CUP/Bison仍然是合理的选择。 – Bruno 2010-09-23 14:06:01

+0

这是一个真正的项目,我们不能使用XSLT,因为我想要遵循的方法得到了团队的认可。所以我不得不使用它 – Swapna 2010-09-23 15:03:54

1

我从来没有亲自使用它,但StringTempate(http://www.stringtemplate.org/)是Velocity的公正替代品。有些人实际上说这比较好。

+0

我们不允许使用任何开源模板处理器。我们需要编写我们的定制处理器。 – Swapna 2010-09-23 13:33:38

+0

对不起,听到@Apps ...那吸吮 – 2010-09-23 18:21:42