2013-03-26 55 views
-1

首先,我是XSLT的新手。 我正在使用Sharepoint列表,如果有特定區域中的數據,我需要獲取鏈接才能顯示。如果某個季度沒有數據,我需要有一個標籤說明。Xstl全局變量設置爲每個並在foreach後使用

所以我所做的就是我創建了一個foreach循環,用於給定年份的同一月份的每個數據。我知道我不能在xslt中重新分配一個變量,但我不知道如何執行我想要的操作。 這是我的代碼示例。由於我正在使用Sharepoint,因此我沒有訪問XML。 :/

<xsl:variable name="DataQ1" select="'False'"/> 
<xsl:variable name="DataQ2" select="'False'"/> 
<xsl:variable name="DataQ3" select="'False'"/> 
<xsl:variable name="DataQ4" select="'False'"/> 
<xsl:for-each select="../Row[generate-id()=generate-id(key('MonthKey', substring(@Date,6,7))[substring('@Date',1,4) = $varYear)][1])]"> 
    <xsl:variable name="currentMonth" select="number(substring(@Date,6,7))"/> 
    <xsl:choose> 
     <xsl:when test="$currentMonth &gt;= 1 and $currentMonth $lt;=4"> 
      <!--set $DataQ1 to true--> 
     </xsl:when> 
     <xsl:when test="$currentMonth &gt;= 4 and $currentMonth $lt;=7"> 
      <!--set $DataQ2 to true--> 
     </xsl:when> 
     <xsl:when test="$currentMonth &gt;= 7 and $currentMonth $lt;=10"> 
      <!--set $DataQ3 to true--> 
     </xsl:when> 
     <xsl:otherwise> 
      <!--set $DataQ4 to true--> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:for-each> 
<div> 
    <xsl:choose> 
     <xsl:when test="$DataQ1= 'True'"> 
      <a> 
       <xsl:attribute name="href"> 
        <xsl:value-of select="www.example.come"/> 
       </xsl:attribute> 
       <xsl:value-of select="'LinkToDataofQ1'"/> 
      </a> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="'There's no data for this quarter.'"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</div> 
+0

請編輯問題並提供確切的(最好是小的)源XML文檔和確切的轉換結果。另外,請說明轉換必須執行的要求(規則/限制)。 – 2013-03-27 04:07:53

回答

1

您在示例代碼中使用key函數,但未發佈密鑰聲明。但我認爲你可以實現你想要用下面的代碼是什麼:

<div> 
    <xsl:choose> 
     <xsl:when test="../Row[substring(@Date, 1, 4) = $varYear and substring(@Date, 6, 2) &gt;= 1 and substring(@Date, 6, 2) &lt; 4]"> 
      <a href="http://www.example.com/">LinkToDataofQ1</a> 
     </xsl:when> 
     <xsl:otherwise>There's no data for this quarter.</xsl:otherwise> 
    </xsl:choose> 
</div> 

其他一些注意事項:

  • 在您的測試Q1你寫$currentMonth <= 4。我想你想要的是$currentMonth < 4
  • 要從@Date中提取月份,請使用substring(@Date, 6, 7)substring的第三個參數是子字符串的長度,而不是結束索引。所以你可能應該寫substring(@Date, 6, 2)
  • 而不是<xsl:value-of select="'string'"/>,你可以簡單地寫string
+0

謝謝你,這是我正在尋找的東西。併爲我的許多錯誤感到抱歉。 :/很高興看到你仍然可以理解我想要的東西! – Frederic 2013-03-27 13:53:16