好吧这是我的xslt用于循环遍历主项目的项目,但我希望能够循环遍历模板...原因是我的xslt可以更具体而不是显示家居项下的一切
<xsl:template match="*" mode="main">
<div id="aside">
<ul id="nav">
<xsl:for-each select="$home/descendant-or-self::item[position() <= 6]">
<li>
<sc:link>
<sc:text field="Title"></sc:text>
</sc:link>
</li>
</xsl:for-each>
</ul>
<div class="advertisement">
<sc:image field="Image"></sc:image>
</div>
</div>
</xsl:template>
答案 0 :(得分:3)
从您的xslt看来,您似乎在谈论导航。我将创建一个只有一个名为ShowInNavigation的字段的特定导航模板,而不是循环遍历不同的模板。 然后所有其他模板将继承此模板,导航xslt将变得更简单
<xsl:template match="*" mode="main">
<div id="aside">
<ul id="nav">
<xsl:for-each select="$home/descendant-or-self::item[sc:fld('ShowInNavigation') = '1']">
<li>
<sc:link>
<sc:text field="Title"></sc:text>
</sc:link>
</li>
</xsl:for-each>
</ul>
<div class="advertisement">
<sc:image field="Image"></sc:image>
</div>
</div>
</xsl:template>
此外,请勿在导航中使用 descendant-or-self :: item ,因为随着网站的增长,导航将成为您的瓶颈。 最好使用 $ home / item [sc:fld('ShowInNavigation')='1'] ,然后对上面的主节点进行硬编码。所以xslt将成为:
<xsl:template match="*" mode="main">
<div id="aside">
<ul id="nav">
<li>
<sc:link select="$home">
<sc:text field="Title"></sc:text>
</sc:link>
</li>
<xsl:for-each select="$home/item[sc:fld('ShowInNavigation') = '1']">
<li>
<sc:link>
<sc:text field="Title"></sc:text>
</sc:link>
</li>
</xsl:for-each>
</ul>
<div class="advertisement">
<sc:image field="Image"></sc:image>
</div>
</div>
</xsl:template>