是否可以在变量或参数中使用"属性值模板"?

kub*_*ubi 6 xslt

这很好很短:

<img src="{$base}/{@filename}.jpg" />
Run Code Online (Sandbox Code Playgroud)

但有时你需要重用它src,所以它变成了这个:

<xsl:variable name="imgsrc">
    <xsl:value-of select="$base">/<xsl:value-of select="@filename">
    <xsl:text>.jpg</xsl:text>
</xsl:variable>
<img src="$imgsrc" />
Run Code Online (Sandbox Code Playgroud)

根据http://www.w3.org/TR/xslt#dt-attribute-value-template,你不能在文字元素属性之外使用"花括号插值语法",但可能有一个不那么 - hacky hack做的伎俩?我很懒,我知道.

Ian*_*rts 7

您可以使用select表达式来定义变量,使用concat函数将各个位连接在一起:

<xsl:variable name="imgsrc" select="concat($base, '/', @filename, '.jpg')"/>
<img src="{$imgsrc}" />
Run Code Online (Sandbox Code Playgroud)

这也比<xsl:value-of>方法更有效,因为通过使用select直接将变量设置为字符串值而不是创建包含文本节点的树片段,然后在引用变量时必须将其转换回字符串.


Mic*_*Kay 6

XSLT 3.0在这方面包含一些好东西:

(a)联合经营者

select="$base || '/' || @filename || '.jpg'
Run Code Online (Sandbox Code Playgroud)

(b)"文本值模板"

<xsl:variable name="x">{$base}/{@filename}/.jpg</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

(出于兼容性原因,需要启用)