我正在努力让我的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']
有没有办法保存它,只需在应用模板中使用它。
答案 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>...