【发布时间】:2014-03-31 15:25:48
【问题描述】:
EXSLT 的核心日期函数在我使用多年的一些 XSL 模板中运行良好。我想开始使用一个新的:seconds。此功能不是“核心”功能之一,因此实施可以声称符合 EXSLT 而无需实际实施。
我正在使用带有 Xalan 2.7.1 的 Cocoon 2.1.11,它似乎选择不实现 date:seconds。
幸运的是,EXSLT 的好心人提供了下载来帮助您插入单个功能,但我似乎无法弄清楚如何实际实现该插件。
例如,我可以使用此模板轻松使用核心功能:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times" >
<xsl:template match="/">
<xsl:value-of select="date:date-time()" />
</xsl:template>
</xsl:stylesheet>
在尝试使用date.seconds 函数时,我尝试了以下方法:
- 只需将
<xsl:import href="date.seconds.xsl" />添加到我的模板中,然后使用date:seconds()。这让我收到错误消息“对于扩展功能,找不到方法 org.apache.xalan.lib.ExsltDatetime.seconds” - 如上所示删除
xmlns:date。这让我收到错误“前缀必须解析为命名空间:日期” - 将
date.seconds.xsl的内容放在我要编写的模板中,然后不带参数调用date:seconds()(默认情况下它被定义为使用当前时间)。我收到此错误消息:“对方法秒的实例方法调用需要一个对象实例作为第一个参数”。现在看起来很有希望。 - 向
date:seconds添加一个参数。我收到错误消息:“对于扩展函数,找不到方法 java.lang.String.seconds([ExpressionContext,] )”
对于如何使用这个非核心的 EXSLT 函数有什么建议吗?
这是我当前的模板,仍然告诉我它正在尝试调用java.lang.String.seconds():
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:func="http://exslt.org/functions"
xmlns:date="http://exslt.org/dates and times">
<xsl:import href="date.seconds.xsl" />
<func:script language="exslt:javascript" implements-prefix="date" src="date.js"/>
<func:script language="exslt:msxsl" implements-prefix="date" src="date.msxsl.xsl"/>
<xsl:template match="/">
<xsl:value-of select="date:seconds('2014-02-27')" />
</xsl:template>
</xsl:stylesheet>
【问题讨论】: