2013-04-04 154 views
0

我正在嘗試使用版本2.0的XSLT將XML轉換爲CSV。但是在XSLT中使用format-date方法時出現編譯錯誤。 以下是錯誤:在XSLT中使用format-date()方法時出現編譯錯誤

Error checking type of the expression 'funcall(format-date, [variable-ref(dt/string), literal-expr([D01]/[M01]/[Y0001])])'.
FATAL ERROR: 'Could not compile stylesheet'.

XSLT代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:func="http://exslt.org/functions" xmlns:date="http://exslt.org/dates-and-times" 
      extension-element-prefixes="date" date:doc="http://www.exslt.org/date"> 

<xsl:output method="text"/> 

<xsl:template match="/">  
<xsl:variable name="dt" select="'2013-04-04'"/> 
<xsl:value-of select="format-date($dt, '[D01]/[M01]/[Y0001]')" /> 
<xsl:value-of select="format-date(current-date(), '[D01]/[M01]/[Y0001]')" />    

</xsl:template> 
</xsl:stylesheet> 

回答

1

你的變量$ DT是一個字符串,而不是一個日期。在格式化之前,您需要使用xs:date('2013-04-04')將其轉換爲日期。

+0

即使在將其轉換爲日期之後也會得到相同的錯誤,當我使用「current-date()」時,也會得到相同的錯誤。我不確定我是否缺少一些東西。當我嘗試在XSLT中使用日期函數時,出現此編譯錯誤。沒有日期函數,我的XSL代碼工作正常。我正在使用2.0版 – Jyothi 2013-04-04 18:19:18

+0

也許你沒有使用2.0版。有時候人們會認爲只是在樣式表中寫入version =「2.0」會自動將XSLT處理器變成2.0處理器。你如何進行轉型? – 2013-04-04 19:49:35

+0

我正在使用java代碼的「javax.xml.transform」轉換器。我想將從「System.currentTimeMillis()」方法返回的日期時間轉換爲用戶可讀的格式,如「MM/dd/yyyy hh:mm:ss a」「。 從「System.currentTimeMillis()」(例如:1364969832764)返回的值被寫入XML,然後我試圖通過XSLT將其轉換爲日期時間格式。 – Jyothi 2013-04-05 14:44:04

0

這爲我工作(使用撒克遜):

<xsl:variable name="dt">2013-04-04</xsl:variable> 
+1

這個原理的工作原理是該變量是一個XML文檔節點,它被霧化以創建一個untypedAtomic值,並且在傳遞給一個函數時,一個untypedAtomic值會自動轉換爲所需的類型(xs:date)。不過這很方便,這是實現目標的一種迂迴和低效的方式。 – 2013-04-04 16:14:45