使用javascript函数对XSL文件进行排序

时间:2017-08-23 13:42:29

标签: javascript xml xslt filter

我想按当前日期过滤我的XSL样式表,以便只显示具有当前日期的条目。 我用简单的javascript函数获取当前日期:

<msxsl:script language="JScript" implements-prefix="myJavaScript">
<![CDATA[
    function getDate() {
        var today = new Date();
        var d = today.getDate();
        var m = today.getMonth() + 1;
        var y = today.getFullYear();

        var year = d + "." + m + "." + y;
        return year;
    }
]]>
</msxsl:script>

现在我想按当前日期过滤我的XSL数据。

我尝试了这个,但这不起作用:

<xsl:for-each select="logEntry">
<xsl:if expression='<xsl:value-of select="myJavaScript:getDate()"/> == 23.08.2017'>

也许有人知道如何解决这个问题。 我正在使用XML / XSL 1.0。我知道XML / XSL 2.0有一个内置函数来获取当前日期,但我需要使用1.0版本。

由于

1 个答案:

答案 0 :(得分:0)

这是一个有效的例子

示例XML

<xml>
    <list output='no'>20.8.2017</list>
    <list output='no'>21.8.2017</list>
    <list output='no'>22.8.2017</list>
    <list output='yes'>23.8.2017</list>
    <list output='no'>24.8.2017</list>
</xml>

和这个XSL

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"  
    xmlns:myJavaScript="urn:my-javascripts"
>
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

<msxsl:script language="JScript" implements-prefix="myJavaScript">
<![CDATA[
    function getDate() {
        var today = new Date();
        var d = today.getDate();
        var m = today.getMonth() + 1;
        var y = today.getFullYear();
        var year = d + "." + m + "." + y;
        return year;
    }
]]>
</msxsl:script>


<xsl:template match="/">
<xsl:variable name='dt' select='myJavaScript:getDate()'/>
<xml>
    <xsl:attribute name='dt'><xsl:value-of select='$dt'/></xsl:attribute>
    <xsl:for-each select='//list[.=$dt]'>
        <xsl:copy-of select='.'/>
    </xsl:for-each>
</xml>
</xsl:template>

</xsl:stylesheet>

产生此结果

<xml dt="23.8.2017" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:myJavaScr
ipt="urn:my-javascripts">
<list output="yes">23.8.2017</list>
</xml>