在XSLT中使用format-date()方法时出现编译错误

在XSLT中使用format-date()方法时出现编译错误,xslt,compiler-errors,formatdatetime,Xslt,Compiler Errors,Formatdatetime,我正在尝试使用XSLT版本2.0将XML转换为CSV。但在XSLT中使用format date方法时,我遇到了一个编译错误。 错误如下: 检查表达式“funcall(格式日期、[variable ref(dt/string)、literal expr([D01]/[M01]/[Y0001])]”的类型时出错。 致命错误:“无法编译样式表” XSLT代码: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version

我正在尝试使用XSLT版本2.0将XML转换为CSV。但在XSLT中使用format date方法时,我遇到了一个编译错误。 错误如下:

检查表达式“funcall(格式日期、[variable ref(dt/string)、literal expr([D01]/[M01]/[Y0001])]”的类型时出错。
致命错误:“无法编译样式表”

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>

这对我很有效(使用萨克森):

2013-04-04

变量$dt是字符串,而不是日期。您需要使用xs:date('2013-04-04')将其转换为日期,然后才能对其进行格式化。

之所以可以这样做,是因为该变量是一个XML文档节点,它被原子化以创建一个非类型数据项值,并且当传递给函数时,非类型数据项值会自动转换为所需的类型(xs:date)。无论多么方便,这都是一种迂回且低效的实现目标的方法。即使在将其转换为日期后仍会出现相同的错误,当我使用“current-date()”时也会出现相同的错误。我不确定我是否遗漏了什么。当我尝试在XSLT中使用日期函数时,会出现这个编译错误。如果没有日期函数,我的XSL代码可以正常工作。我使用的是2.0版,您可能没有使用2.0版。有时人们会想象,只要在样式表中写入version=“2.0”,XSLT处理器就会自动变成2.0处理器。您是如何运行转换的?我正在使用带有java代码的“javax.xml.transform”转换器。我想将“System.currentTimeMillis()”方法返回的日期时间转换为用户可读的格式,如“MM/dd/yyyy hh:MM:ss a”。从“System.currentTimeMillis()”(例如:1364969832764)返回的值被写入XML,然后我试图通过XSLT将其转换为日期时间格式。执行类似于
的操作以检查XSLT处理器。您可能正在使用内置处理器,即XSLT1.0,需要将Saxon放在类路径上。我可以下载saxson9he.jar并通过命令行在XSLT2.0中运行format date方法。但是当我尝试使用eclipse时,我得到了一个错误:“javax.xml.transform.TransformerFactoryConfigurationError:Provider net.sf.saxon.TransformerFactoryImpl未找到”。您能告诉我如何在使用eclipse和JAVA以及项目被Mavenize时使用saxon吗。我在POM中添加了依赖项,并用tSystem.setProperty(“javax.xml.transform.TransformerFactory”、“net.sf.saxon.TransformerFactoryImpl”)更新了代码;
<xsl:variable name="dt">2013-04-04</xsl:variable>