我想按照这个答案给出了指导意见: time difference计算时间差重新
但不明白为什么模板方法失败。也许它与命名空间有关。 而我不明白我的功能方法的结果。
输入XML:
<BatchData >
<Line>
<Batch>
<start>2011-12-13T16:15:26</start>
<end>2011-12-13T16:17:27</end>
</Batch>
</Line>
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:date="http://exslt.org/dates-and-times"
extension-element-prefixes="date"
>
<xsl:include href="date.msxsl.xsl" />
<!-- msxsl.exe myDateTestInput.xml myDateEXSLT.xsl -o dateTestOut.html-->
<!-- java -cp C:\XSL\SaxonHE9-7-0-14J\saxon9he.jar net.sf.saxon.Transform -t -s:myDateTestInput.xml -xsl:myDateEXSLT.xsl -o:dateTestOut.html -->
<xsl:output method="html" />
<xsl:template match="/BatchData/Line/Batch">
<html>
<head>
</head>
<body>
<table >
<tr>
<td>
<xsl:variable name="time-diff-dur">
<xsl:call-template name="date:difference">
<xsl:with-param name="start" select="start" />
<xsl:with-param name="end" select="end" />
</xsl:call-template>
</xsl:variable>
<!-- The above returns a duration formatted string, so convert that to seconds: -->
<xsl:variable name="time-diff-sec">
<xsl:call-template name="date:seconds">
<xsl:with-param name="seconds" select="$time-diff-dur" />
</xsl:call-template>
</xsl:variable>
<!--
<xsl:variable name="time-diff-sec" select="date:seconds(date:difference(start, end))" />
<xsl:value-of select="$time-diff-sec"></xsl:value-of>
-->
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
我同时使用msxsl和Saxon9he。他们在模板方法上都失败了,但撒克逊至少提供了一些错误信息。这是使用模板的错误:
静态误差在XSL:呼叫模板上线25列51 myDateEXSLT.xsl的: XTSE0650:没有模板存在名为日期:区别在XSL 静态错误:调用myDateEXSLT.xsl第32列第52行模板: XTSE0650:没有指定日期的模板:秒 myDateEXSLT.xsl第31行xsl:变量的警告: SXWN9001:没有以下兄弟指令的变量没有效果 样式表汇编过程中报告了错误
当我注释掉模板并取消注释函数方法时,我没有得到任何错误,但不知道如何将time-diff-sec的结果显示为表数据值。相反,输出只是输入文件的2个日期时间。
我也使用“导入”而不是“包含”,但没有任何区别。有区别吗?
所以总结一下问题:
- 我做了什么错模板方法?
- 如何显示功能方法中的 值?
- 'import'和'include'之间有区别吗?
也许前者是从一个网站拉下来,而后者是为了本地资源。
感谢。
这是文件date.msxsl.xsl。我会在这里发布它,因为该exslt.org网站似乎有问题。 (重命名扩展名): date.msxsl.xsl