Sharepoint Designer XLST XSL IF /选择声明

时间:2014-12-29 21:57:18

标签: xslt sharepoint

任何人都可以告诉我这个我在SharePoint Designer中使用的代码有什么问题:

<xsl:choose>
    <xsl:when test="number((ddwrt:DateTimeTick(ddwrt:GenDisplayName(string(ddwrt:Today())))- (ddwrt:DateTimeTick(ddwrt:GenDisplayName(string(@Date_x0020_only))))) div 864000000000) &gt;  7 div 864000000000 and &lt;= 14 div 864000000000">
        <h2> <strong><span style="font-size: 8pt"> WEEK 1 </span></strong>
            <xsl:text xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" ddwrt:whitespace-preserve="yes" xml:space="preserve"> </xsl:text>
        </h2>
    </xsl:when>
</xsl:choose>

如果我取出&lt;= 14 div 864000000000部分,它就有效但我基本上试图标记一些东西,如果它的年龄介于7和<= 14天之间,但似乎无法使其发挥作用。

这是错误:

SharePoint Designer cannot render the XSLT in this Data View. Try to undo your changes or re-insert the Data View.

Failed setting processor stylesheet : 0x80004005 : Expression expected. number((ddwrt:DateTimeTick(ddwrt:GenDisplayName(string(ddwrt:Today())))- (ddwrt:DateTimeTick(ddwrt:GenDisplayName(string(@Date_x0020_only))))) div 864000000000) > 7 div 864000000000 and --><=<-- 14 div 864000000000

更新:

非常感谢@matthias_h和@Jason Aller

所以这是我最终使用的代码:

<xsl:variable name="X"   

                        select="number((ddwrt:DateTimeTick(ddwrt:GenDisplayName(
                        string(ddwrt:Today())))-(ddwrt:DateTimeTick(ddwrt:GenDisplayName(
                        string(@Date_x0020_only))))) div 864000000000)">

                </xsl:variable>

            <xsl:if test="$X &gt; 0 div 864000000000 and $X &lt;= 7 div 864000000000">

                <xsl:text> WEEK 1</xsl:text>

            </xsl:if>

            <xsl:if test="$X &gt; 7 div 864000000000 and $X &lt;= 14 div 864000000000">

                <xsl:text> WEEK 2</xsl:text>

            </xsl:if>

            <xsl:if test="$X &gt; 14 div 864000000000 and $X &lt;= 21 div 864000000000">

                <xsl:text> WEEK 3</xsl:text>

            </xsl:if>

            <xsl:if test="$X &gt; 21 div 864000000000">

                <xsl:text> Escalation</xsl:text>

            </xsl:if>

现在,这在Sharepoint设计器预览部分中有效,它看起来像这样:

11/7/2014 11:56 AM升级

11/7/2014 11:56 AM升级

11/7/2014 11:56 AM升级

11/26/2014 8:47 AM升级

2014年12月18日下午3:10第2周

但是在浏览器中显示如下:

11/7/2014 11:56 AM升级

11/7/2014 11:56 AM升级

11/7/2014 11:56 AM升级

11/26/2014 8:47 AM升级

12/18/2014 3:10 PM升级

12/29/2014 1:48 PM Escalation

由于某种原因,它称它们全部升级。有什么建议吗?

我真的很感激帮助。

更新2

谢谢@matthias_h

回答你的问题:

1。)是的,它在SPD预览中是正确的,但在浏览器中不正确。

2。)这就是SPD中的值

11/7/2014 11:56 AM升级0.00000000006134259259259259

11/7/2014 11:56 AM升级0.00000000006134259259259259

11/7/2014 11:56 AM升级0.00000000006134259259259259

11/26/2014 8:47 AM升级0.00000000003935185185185185

2014年12月18日下午3:10第2周0.000000000013888888888888888

这些是浏览器中的值的样子

11/7/2014 11:56 AM升级53

11/7/2014 11:56 AM升级53

11/7/2014 11:56 AM升级53

11/26/2014 8:47 AM升级34

12/18/2014 3:10 PM Escalation 12

您认为它与我有关,将所有内容划分为864000000000?

我这样做的原因是因为它没有在浏览器中正确地延迟日期差异。

所以我使用了这个解决方案:http://sympmarc.com/2013/01/page/2/

再次感谢您的帮助

1 个答案:

答案 0 :(得分:2)

由于缺少命名空间和函数,我无法测试完整的表达式,但我认为存在以下语法错误,例如:

<xsl:when test="value &gt; 14 and &lt; 7">

应该是

<xsl:when test="value &gt; 14 and value &lt; 7">

我建议 - 为了可读性,将number()中的表达式作为变量,例如

<xsl:variable name="testString"   
      select="number((ddwrt:DateTimeTick(ddwrt:GenDisplayName(
      string(ddwrt:Today())))-(ddwrt:DateTimeTick(ddwrt:GenDisplayName(
      string(@Date_x0020_only))))) div 864000000000)">

然后检查是否

<xsl:when test="$testString &gt; 7 div 864000000000 
                and $testString &lt;= 14 div 864000000000">

会奏效 此外,如果您没有xsl:otherwise或其他xsl:when个案例,则可以改为xsl:if