xsl:选择save作为变量

时间:2012-09-18 07:50:33

标签: performance xslt

我正在努力让我的xsl尽可能高效。所以这就是我所拥有的。

<xsl:when test=".//div[starts-with(@class,'ls-col ') or @class='ls-col']">
    <xsl:apply-templates select=".//div[starts-with(@class,'ls-col ') or @class='ls-col']" mode="col"/>
</xsl:when>`

所以这里的逻辑是,如果存在ls-col的div应用mode =“col”的模板。

所以我认为这对我来说是两次评估的方式

.//div[starts-with(@class,'ls-col ') or @class='ls-col']

有没有办法保存它,只需在应用模板中使用它。

2 个答案:

答案 0 :(得分:0)

在这种情况下,您实际上并不需要 xsl:when 。只需执行 xsl:apply-templates

即可
<xsl:apply-templates 
   select=".//div[starts-with(@class,'ls-col ') or @class='ls-col']" mode="col"/>

如果没有匹配的 div 标记,那么 xsl:apply-templates 将无法匹配任何内容,因此此时不会输出任何内容。因此,没有理由事先检查是否存在此类标签。

答案 1 :(得分:0)

正如Tim C所说,如果它是一个xsl:如果你可以依靠apply-templates在条件不正确时什么也不做。但如果有一个'其他'分支,只需将条件放在一个变量中:

<xsl:variable name="c" select=".//div[starts-with(@class,'ls-col ') or @class='ls-col']"/>
<xsl:choose>
<xsl:when test="$c">
    <xsl:apply-templates select="$c" mode="col"/>
</xsl:when>
<xsl:otherwise>...