XSLT可以插入当前日期吗?

Eri*_*tas 88 xslt xhtml

我们在办公室中使用的程序通过将使用XSLT文件导出的XML文件转换为XHTML来导出报告.我正在重写XSLT以更改格式并从源XML文件中添加更多信息.

我想在最终报告中包含文件的创建日期.但是当前日期/时间不包含在原始XML文件中,也无法控制XML文件的创建方式.似乎没有任何构建到XSLT中的日期函数将返回当前日期.

有没有人知道我在XSLT转换过程中如何能够包含当前日期?

Jim*_*son 111

XSLT 2

日期函数本身可用,例如:

<xsl:value-of  select="current-dateTime()"/>
Run Code Online (Sandbox Code Playgroud)

还有current-date()current-time().

XSLT 1

使用EXSLT日期和时间扩展包.

  1. GitHub下载日期和时间包.
  2. 提取date.xsl到XSL文件的位置.
  3. 设置样式表标题.
  4. 导入date.xsl.

例如:

<xsl:stylesheet version="1.0" 
    xmlns:date="http://exslt.org/dates-and-times" 
    extension-element-prefixes="date"
    ...>

    <xsl:import href="date.xsl" />

    <xsl:template match="//root">
       <xsl:value-of select="date:date-time()"/>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

  • 对于使用[tag:.net]/[tag:c#]的任何人,不要花太多时间尝试使用标准.NET XSLT转换器进行EXSLT导入 - 使用[MVP.XML](http:// mvpxml. codeplex.com/)马上.它具有[对ESXLT的内置支持](http://mvpxml.codeplex.com/wikipage?title=EXSLT.NET). (5认同)

Rub*_*ias 14

对于MSXML解析器,请尝试以下方法:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:my="urn:sample" extension-element-prefixes="msxml">

    <msxsl:script language="JScript" implements-prefix="my">
       function today()
       {
          return new Date(); 
       } 
    </msxsl:script> 
    <xsl:template match="/">

        Today = <xsl:value-of select="my:today()"/>

    </xsl:template> 
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

还可以使用msxsl:script使用JScript,C#和Visual Basic .NET扩展XSLT 阅读XSLT样式表脚本


Kev*_*son 14

你能控制运行转型吗?如果是这样,您可以将当前日期传递给XSL并在XSL中使用$ current-date.下面是你如何声明传入的参数,但是知道你如何运行转换,我不能告诉你如何传递值.

<xsl:param name="current-date" />
Run Code Online (Sandbox Code Playgroud)

例如,从bash脚本中,使用:

xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml
Run Code Online (Sandbox Code Playgroud)

然后,在xsl中你可以使用:

<xsl:value-of select="$current-date"/>
Run Code Online (Sandbox Code Playgroud)


小智 10

...
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:local="urn:local" extension-element-prefixes="msxsl">

    <msxsl:script language="CSharp" implements-prefix="local">
        public string dateTimeNow()
        {       
          return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
        } 
    </msxsl:script>  
...
    <xsl:value-of select="local:dateTimeNow()"/>
Run Code Online (Sandbox Code Playgroud)


小智 7

迟到的答案,但我的解决方案适用于Eclipse XSLT.Eclipse在撰写本文时使用了XSLT 1.您可以安装像Saxon这样的XSLT 2引擎.或者您可以使用下面的XSLT 1解决方案插入当前日期和时间.

<xsl:value-of select="java:util.Date.new()"/>
Run Code Online (Sandbox Code Playgroud)

这将调用Java的Data类来输出日期.除非您在<xsl:stylesheet>标记中添加以下"java:"定义,否则它将无法工作.

<xsl:stylesheet [...snip...]
         xmlns:java="java"
         [...snip...]>
Run Code Online (Sandbox Code Playgroud)

我希望能有所帮助.这个简单的答案很难找到.


Bla*_*ack 5

format-date(current-date(), '[M01]/[D01]/[Y0001]') = 09/19/2013
format-time(current-time(), '[H01]:[m01] [z]') = 09:26 GMT+10
format-dateTime(current-dateTime(), '[h1]:[m01] [P] on [MNn] [D].') = 9:26 a.m. on September 19.
Run Code Online (Sandbox Code Playgroud)

参考:使用XSLT 2.0和XPath格式化日期和时间