2013-05-30 27 views
1

我想讓Counter值根據條件遞增。但我無法增加一個值或將1添加到全局變量。我正在使用以下代碼在xslt中添加一個或遞增的變量

<xsl:variable name="count">0</xsl:variable> 
<xsl:variable name="incre">1</xsl:variable>  

<xsl:template match="/"> 
    <xsl:if test="$video1 != ''"> 
    <xsl:variable name="count" select="number($count)+number($incrementor)"/> 
    <!-- display video1 --> 
    </xsl:if> 
    <xsl:if test="$video2 != ''"> 
    <xsl:variable name="count" select="number($count)+number($incrementor)"/> 
    <!-- display video2 --> 
    </xsl:if> 
    <xsl:if test="$video3 != ''"> 
    <xsl:if test="$count<2"> 
     <xsl:variable name="count" select="number($count)+number($incrementor)"/> 
     <!-- display video3 --> 
    </xs:if> 
    </xsl:if> 
    <xsl:if test="$video4 != ''"> 
    <xsl:if test="$count<2"> 
     <xsl:variable name="count" select="number($count)+number($incrementor)"/> 
     <!-- display video4 --> 
    </xs:if> 
    </xsl:if> 
</template> 

如何增加count的值或向其中添加1。提前致謝。

+1

第一次初始化後,無法在xslt中更改變量的值。也許你應該解釋一下目標。就像顯示前兩個視頻的值不是空的那樣? –

+0

@ hr_117是的,我想顯示2個非空視頻6 – aaviss

+0

你可以發佈一個XML樣本? ''xsl:number'可能比'count()'更適合你。 –

回答

2

您的問題出現在嘗試使用函數式語言時像程序員程序員一樣思考。這是一個糟糕的組合;工具在與他們合作時工作得更好,而不是與他們合作。

不要嘗試遍歷文檔並增加變量以保持事物的數量。用聲明性術語描述你想要的東西。

在這裏,你想要顯示的文檔中的前兩個非空<video>元素,並希望其他人(所有空<video>元素和第三張及以後非空<video>元素)默默地傳遞過。 (當然,由於你不顯示你的XML,我實際上並不知道你真正想要什麼,用XML術語)。

所以你想要一個模板來抑制空的<video>元素:

<xsl:template match="video[not(node())]"/> 

你想要一個模板,通過兩個或多個非空<video>元素壓制之前文檔中的任何<video>元素:

<xsl:template 
    match="video[count(preceding::video 
        [* or normalized-space(.)] 
        ) 
       > 1]"/> 

你想要一個模板來顯示前兩個非 - 空<video>元素:

<xsl:template 
    match="video[* or normalized-space(.)] 
       [count(preceding::video 
        [* or normalized-space(.)] 
        ) 
       &lt; 2]"> 

    <xsl:message>Displaying video ... </xsl:message> 
    <!--* ... whatever else is needed to display the video ... *--> 

<xsl:template>