Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java进行模板处理_Java_Pattern Matching_Template Engine - Fatal编程技术网

使用Java进行模板处理

使用Java进行模板处理,java,pattern-matching,template-engine,Java,Pattern Matching,Template Engine,我们有一个电子邮件模板,需要使用Java进行处理。我们必须用实际值替换模板中的变量。我们能够通过模式匹配实现这一点,即;通过搜索模板中的特定图案,并将其替换为实际值。 现在我们需要在XML文件中有条件 $if($subject!=null) sample subject $endif 我们还需要检查这种情况主题是一个需要重新计算其值的变量。 我们不允许使用Velocity模板处理器 请建议实现这一点的最佳方法。是否有好的解析方法,比如在第一次解析中为变量应用值,然后在第二次解析中检查逻辑。如

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

$if($subject!=null)
 sample subject
$endif
我们还需要检查这种情况<代码>主题是一个需要重新计算其值的变量。 我们不允许使用Velocity模板处理器


请建议实现这一点的最佳方法。是否有好的解析方法,比如在第一次解析中为变量应用值,然后在第二次解析中检查逻辑。如果有人能提供他们有价值的建议,这将非常有帮助。

如果你不能使用Velocity,你可能会对它感兴趣。我已经成功地在几个项目中使用了

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


在此之后,如果您真的想以艰难的方式完成此任务,您可以使用lexer和解析器(如和)构建自己的模板处理器。话虽如此,在您的示例中,您对关键字(
$if
$endif
)和变量(
$subject
)都使用了
$
符号。虽然这在原则上没有什么问题,但为这两种类型提供不同的表示法可能会更容易,以使lexer更容易(更少的异常/保留字)。更好的分隔符来区分实际内容和模板指令会有所帮助。

我从未亲自使用过它,但StringTempate()是Velocity的一个合理替代品。有人说它更好。

如果不允许使用Velocity,是否允许使用其他模板处理器?嗨,Bruno,我们不允许使用任何开源模板处理器。@Apps,这是家庭作业还是真正的项目?这是许可证问题吗?您仍然可以使用J2SE5及更高版本附带的JAXP使用XSLT选项(尽管严格来说,您可能会在OpenJDK中发现它是开源的)。除此之外,如果您需要演示一些手动工作,JFlex/CUP/Bison仍然是合理的选择。这是一个实际的项目,我们不能使用XSLT,因为我假设采用的方法已经得到了团队的批准。所以我不得不使用itI我有点困惑,(a)为什么你不能使用任何开源(你意识到现在连JDK都是开源的吗?)和(b)你的团队批准约束是什么,XLST是一个众所周知的工具,它是现成的,可以做你想要做的事情。重新发明已经存在并可以免费获得的东西(即使许可证允许包含在商业产品中,如ApacheVelocity)听起来并不是一个很好的时间和金钱利用。如果你的团队其他成员没有得到这些论点,资助你项目的人可能会得到。我们不允许使用任何开源模板处理器。我们需要编写自定义处理器。很抱歉听到@Apps。。。真糟糕