我已经让 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>