这很好而且简短:
<img src="{$base}/{@filename}.jpg" />
但有时你需要重用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" />
根据http://www.w3.org/TR/xslt#dt-attribute-value-template你不能在文字元素属性之外使用“花括号插值语法”,但是可能有一个不那么黑客的黑客来做这个伎俩?我很懒,我知道。
答案 0 :(得分:7)
您可以使用select
表达式来定义变量,使用concat
函数将各个位连接在一起:
<xsl:variable name="imgsrc" select="concat($base, '/', @filename, '.jpg')"/>
<img src="{$imgsrc}" />
这比<xsl:value-of>
方法更有效,因为使用select
直接将变量设置为字符串值,而不是创建包含文本节点的树片段,然后必须是在引用变量时转换回字符串。
答案 1 :(得分:5)
XSLT 3.0在这方面有一些好处:
(a)联合运营商
select="$base || '/' || @filename || '.jpg'
(b)“文本值模板”
<xsl:variable name="x">{$base}/{@filename}/.jpg</xsl:variable>
(出于兼容性原因需要启用)