2012-06-28 47 views
-1

我使用this recursive menu,並做了一些改動。我想要的第一級li標籤是一個具有唯一編號的標識。所以第一個ID是id =「mid0」,第二個是id =「mid1」等等。如何才能做到這一點?如何從元素個數創建唯一標識,如XSLT中的數組?

我是XSLT新手,所以請原諒我問一個愚蠢的問題,但我試過尋找它,我找不到我在找什麼。

<xsl:if test="count($currentPage/ancestor::root/* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']) &gt; '0'"> 
<xsl:for-each select="$currentPage/ancestor::root/* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']"> 
<li class="twocol"> 
<a href="{umbraco.library:NiceUrl(@id)}"> 
<xsl:if test="$currentPage/@id = current()/@id"> 
<xsl:attribute name="class">Selected</xsl:attribute> 
</xsl:if> 
<xsl:value-of select="@nodeName"/> 
</a> 
<xsl:if test="count(current()/* [@isDoc and string(umbracoNaviHide) != '1']) &gt; '0'"> 
<xsl:call-template name="submenu"> 
<xsl:with-param name="level" select="$level+1"/> 
</xsl:call-template> 
</xsl:if> 
</li> 
</xsl:for-each> 
</xsl:if> 

帶班「twocol」李是我需要的ID,因此在輸出端像這樣:

<li id="mid0" class="twocol"> 
<li id="mid1" class="twocol"> 
+1

請編輯的問題,包括您的輸入XML(或它的簡化版本)和所需的輸出結構。 – Utkanos

+0

我試過了,但它都變成了一行代碼。我會再嘗試。 – plebksig

+0

完成,對此感到抱歉。 – plebksig

回答

1

在XSLT for-each塊,有一個可愛的小函數調用position()它將爲您提供與for-each聲明匹配的項目的當前索引。有一個條件屬性標記(僅用於1級項目)相結合,把下面的代碼應該得到你所需要的:

<xsl:for-each select="$currentPage/ancestor::root/* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']"> 
    <li class="twocol"> 

     <!-- NEW CODE --> 
     <xsl:if test="$level = 1"> 
      <xsl:attribute name="id">mid<xsl:value-of select="position()-1" /></xsl:attribute> 
     </xsl:if> 
     <!--/NEW CODE --> 

     <a href="{umbraco.library:NiceUrl(@id)}"> 
      <xsl:if test="$currentPage/@id = current()/@id"> 
       <xsl:attribute name="class">Selected</xsl:attribute> 
      </xsl:if> 
+0

謝謝你謝謝你!任何使它從0開始的方式? – plebksig

+1

是的,不記得它是否爲零索引。可以試着做'position() - 1'。我目前無法測試代碼。 –

+0

這樣做,謝謝! – plebksig

相關問題