6

这很好很简短:

<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你不能在文字元素属性之外使用“大括号插值语法”,但可能有一个不那么- hacky hack 做这个把戏?我很懒,我知道。

4

2 回答 2

7

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

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

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

于 2013-08-05T15:41:05.030 回答
6

XSLT 3.0 包含这方面的一些优点:

(a) 连接运算符

select="$base || '/' || @filename || '.jpg'

(b) “文本值模板”

<xsl:variable name="x">{$base}/{@filename}/.jpg</xsl:variable>

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

于 2013-08-05T16:50:38.347 回答