为每个设置的Xsl全局变量并在foreach之后使用

时间:2013-03-26 19:06:04

标签: sharepoint xslt

首先,我是XSLT的新手。 我正在使用Sharepoint列表,我需要获得一个链接,以显示特定季度的数据。如果某个季度没有数据,我需要有一个标签。

所以我做的是我为给定年份的同一个月的每个数据创建了一个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>

1 个答案:

答案 0 :(得分: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的{​​{1}}中提取月份。 substring(@Date, 6, 7)的第三个参数是子字符串的长度,而不是结束索引。所以你可能应该写substring
  • 您只需撰写substring(@Date, 6, 2)
  • ,而不是<xsl:value-of select="'string'"/>