在 XSLT 模板和 Velocity 中对变量进行两次评估

Variables being evaluated twice in XSLT template and Velocity

我有一个创建 FOP 文件的 xslt 模板,之后我想快速评估该文件。当我遇到这样的事情时:

<fo:basic-link internal-destination="${variableOutside}">
      ${variableInside}
</fo:basic-link>

两个变量 "variableInside" 和 "variableOutside" 都应该由 velocity 而不是 XSLT 来计算。

然而,在第一次 XSLT 转换之后,我得到的是:

<fo:basic-link internal-destination="$">
      ${variableInside}
</fo:basic-link>

也就是说,已经对 variableInside 求值,因为 XSLT 假定这不是文字字符串而是一个变量,并且由于它没有任何值,因此将其留空。

但是,VariableOutside 未被使用,因为我猜它不在属性中。

现在,我知道我可以去掉花括号,这会起作用,但有时,我只需要转换文本的一部分,例如:

${variableOutside}.field1

应该变成

valueofvariable.field1

如果我不使用大括号,Velocity 将假定我正在查找不存在的 variableOutside 内的 field1。

所以,我的问题是,如何转义花括号?我尝试过使用“/”和“\”(双精度和单精度)以及 { 和 },但其中 none 有效。

如果您想在属性中直接输出大括号,而不是让 XSLT 将它们视为属性值模板,请使用双大括号

<fo:basic-link internal-destination="${{variableOutside}}">