格式化日期在xslt版本1中

时间:2014-02-05 21:12:19

标签: xml xslt

我有一个看起来像这样的xml

<book>
  <name>someName</name>
  <date>2014-02-05-05:00</date>
</book>
<book>
  <name>DifferentName</name>
  <date>2014-04-05-05:00</date>
</book>

在我的xslt中,我有这个模式

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:ms="urn:schemas-microsoft-com:xslt" 
xmlns:dt="urn:schemas-microsoft-com:datatypes"> 

所以当我做的时候

<xsl:variable name='myDate' select='date' />
<xsl:value-of select="$myDate" /> 

它工作正常,但当我尝试这样做时

<xsl:variable name='date' select='impactDate' />
<xsl:value-of select="ms:format-date($date, 'MMM dd, yyyy')"/>

我得到了这个例外

The first argument to the non-static Java function 'formatDate' is not a valid object reference.

是否有人知道如何修复此异常,或者我可以使用其他任何功能来执行此操作。

谢谢

2 个答案:

答案 0 :(得分:1)

请注意,顾名思义,ms:任何东西都是特定于Microsoft的扩展函数,并且不是PORTABLE。如果您能以任何其他方式解决问题,那么这是一种不好的做法,因为如果您更换了XSLT处理器,那么您将自己置于一个需要寻找其他解决方案的位置。

更好的做法是使用EXSLT Date Extensions。 EXSLT仍然是一组扩展功能,因此不能保证在所有XSLT处理器中实现 - 但是许多支持大多数或所有这些,并且它们具有巨大的优势,如果它们得到支持它们将起作用所有支持它们的处理器都采用相同的方式。

如果查看EXSLT页面,您还会发现它们显示了许多这些函数的XSLT实现(作为命名模板),可以将其复制到样式表中并完全用作 便携式解决方案

答案 1 :(得分:0)

ms:format-date期望dateTime字符串必须格式化为:2000-02-16T15:56:00

首先尝试使用正确的格式,例如:

<xsl:variable name="date" select="concat(substring(date,1,10),'T',substring(date,12),':00')"/>
<xsl:value-of select="ms:format-date($date, 'MMM dd, yyyy')"/>

编辑:刚刚看到你正在使用java进行转换,因为ms:*函数可以工作我认为你必须使用MSXML或.Net来进行转换