我们在办公室中使用的程序通过将使用XSLT文件导出的XML文件转换为XHTML来导出报告。我正在重写XSLT以更改格式并从源XML文件中添加更多信息。
我想在最终报告中包含文件的创建日期。但是当前日期/时间不包含在原始XML文件中,也无法控制XML文件的创建方式。似乎没有任何构建到XSLT中的日期函数将返回当前日期。
有没有人知道我在XSLT转换过程中如何能够包含当前日期?
答案 0 :(得分:108)
日期函数可以原生使用,例如:
<xsl:value-of select="current-dateTime()"/>
还有current-date()
和current-time()
。
使用EXSLT日期和时间扩展包。
date.xsl
解压缩到XSL文件的位置。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>
答案 1 :(得分:13)
对于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>
另请阅读XSLT Stylesheet Scripting using msxsl:script和Extending XSLT with JScript, C#, and Visual Basic .NET
答案 2 :(得分:13)
您是否可以控制运行转换?如果是这样,您可以将当前日期传递给XSL并在XSL中使用$ current-date。下面是你如何声明传入的参数,但是知道你如何运行转换,我不能告诉你如何传递值。
<xsl:param name="current-date" />
例如,从bash脚本中,使用:
xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml
然后,在xsl中你可以使用:
<xsl:value-of select="$current-date"/>
答案 3 :(得分:9)
...
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()"/>
答案 4 :(得分:7)
迟到的答案,但我的解决方案适用于Eclipse XSLT。 Eclipse在撰写本文时使用了XSLT 1。您可以安装像Saxon这样的XSLT 2引擎。或者您可以使用下面的XSLT 1解决方案插入当前日期和时间。
<xsl:value-of select="java:util.Date.new()"/>
这将调用Java的Data类来输出日期。除非您在<xsl:stylesheet>
标记中添加以下“java:”定义,否则它将无效。
<xsl:stylesheet [...snip...]
xmlns:java="java"
[...snip...]>
我希望能有所帮助。这个简单的答案很难找到。
答案 5 :(得分: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.