2017-01-27 61 views
0

該代碼在每個url後面輸出每個「image」的「url」(超過8的限制),每個url後面帶有$ sep。獲取XSL中的元素總數

但我想設置一個條件,如果它找到例如4「圖像」,那麼它將輸出$ sep 4次(在每個打印出4個url後用$ sep)。但是,當我嘗試下面的代碼時,它似乎不會計算圖像/圖像,因爲計數總是爲1(不管有多少「圖像」)。

示例XML輸入

<images> 
    <image> 
    <url>Url</url> 
    </image> 
    <image> 
    <url>Url</url> 
    </image> 
    <image> 
    <url>Url</url> 
    </image> 
    <image> 
    <url>Url</url> 
    </image> 
</images> 

XSL代碼

<xsl:for-each select="images/image[position() &lt;= 8]"> 
    <xsl:value-of select="url"/> <xsl:value-of select="$sep" /> 

</xsl:for-each> 
    <xsl:variable name="set" select="images/image" /> 
    <xsl:variable name="count" select="count($set)" /> 

<xsl:choose> 
    <xsl:when test="count='4'"> 
     <xsl:value-of select="$sep" /> 
     <xsl:value-of select="$sep" /> 
     <xsl:value-of select="$sep" /> 
     <xsl:value-of select="$sep" /> 
    </xsl:when> 
</xsl:choose> 

電流輸出

URl,URl,URl,URl, 

想輸出

URl,URl,URl,URl,,,,, 

謝謝

+2

@H。 Pauwelyn您對問題標題的編輯根本沒有意義,所以我回滾了。到OP:請顯示輸入文檔,樣式表和輸出的完整的最小示例。謝謝。更多幫助:http://stackoverflow.com/help/mcve。 –

回答

1

您在檢查count變量時錯過了$符號。它應該是這樣......

<xsl:when test="$count=4"> 

(無需爲4左右撇號要麼,因爲$ count是一個數字,儘管它應該在XSLT 1.0仍然有效)

編輯:考慮使用遞歸模板來處理XSLT中的任何數量的image元素。

試試這個..

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="text" /> 
    <xsl:variable name="sep" select="','" /> 

    <xsl:template match="/"> 
     <xsl:for-each select="images/image[position() &lt;= 8]"> 
      <xsl:value-of select="url"/> <xsl:value-of select="$sep" /> 

     </xsl:for-each> 

     <xsl:variable name="set" select="images/image" /> 
     <xsl:variable name="count" select="count($set)" /> 

     <xsl:call-template name="pad"> 
      <xsl:with-param name="count" select="$count" /> 
     </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="pad"> 
     <xsl:param name="count" /> 
     <xsl:if test="$count + 1 &lt; 8"> 
      <xsl:value-of select="$sep" /> 
      <xsl:call-template name="pad"> 
       <xsl:with-param name="count" select="$count + 1" /> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 
+0

是的,謝謝 – PaddyD