0

私は自分の 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" を含むテンプレートを適用するというものです。

だから、これが私に見える方法は、これを2回評価することだと思っていました

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

これを保存して適用テンプレートで使用する方法はありますか。

4

2 に答える 2

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は何にも一致しないため、この時点では何も出力されません。したがって、そのようなタグの存在を事前に確認する理由はありません。

于 2012-09-18T07:55:54.893 に答える
0

Tim C が言うように、それが xsl:if の場合は、条件が真でない場合に何もしない 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>...
于 2012-09-18T08:29:40.613 に答える