2015-09-25 105 views
1

我需要做一些類型的標識符/標誌達到一些if語句。所以,我只有在換每寫一次<h2>(代碼如下):增量變量裏面的每個

<xsl:for-each select="$matchedNodes"> 
    <xsl:variable name="i" select="0"/> 
    <xsl:variable name="j" select="0"/> 
    <xsl:if test="magazineDate != '' and (i &lt; 1)"> 
     <h2>Magasiner</h2> 
     i++ 
    </xsl:if> 

    <xsl:if test="homepageArticleDate != '' and (j &lt; 1)"> 
     <h2>Artikel</h2> 
     j++ 
    </xsl:if> 
</xsl:for-each> 

我一直在使用position()嘗試,但這個是行不通的,因爲這兩個屬性都內$matchedNodes

$ matchedNodes由umbraco節點組成。

任何人都可以看到這個問題的解決方案?我曾考慮過使用xsl:template,但是在XSLT中我只是一個新手,所以我不知道從哪裏開始。

+0

允許使用布爾變量作爲標誌 – Anonymous

+1

請考慮向我們展示您想要創建的matchedNodes輸入節點和相應輸出(HTML'h2'元素?)的示例,然後我們可以向您展示實現該目標的XSLT方式。 –

+0

matchedNodes由umbraco節點組成 – Anonymous

回答

0

XSLT和XPath是功能語言。除此之外,這意味着一旦變量的值被定義,變量就不能被改變。當然,還有其他解決方案,不需要改變任何變量 - 在許多方面,不變性是一種優越的語言特性,導致更易於理解和維護的代碼,並且允許比OIL(Old Imperative語言)。

一種解決方案可能看起來像這樣

<xsl:apply-templates select= 
    "$matchedNodes/magazineDate[normalize-space()][1] 
    | $matchedNodes/homepageArticleDate[normalize-space()][1]" mode="heading"/> 

然後在兩個不同的/獨立的模板(甚至可以嘗試將它們統一到一個單一的模板):

<xsl:template match="magazineDate" mode="heading"> 
    <h2>Magasiner</h2> 
</xsl:template> 

<xsl:template match="homepageArticleDate" mode="heading"> 
    <h2>Artikel</h2> 
</xsl:template>