我想按照這個答案給出了指導意見: 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