2011-06-16 35 views
4

我有一个XML属性<EventDate>2011-06-16 08:00:00</EventDate>,我想用XSLT提取08:00:00。我看到fn:hours-from-dateTime(datetime)感谢w3schools。所以我想知道,为什么没有fn:time-from-dateTime(datetime)如何从dateTime值获取时间?

我该如何使用它?我目前的代码是:

<td><xsl:value-of select="@EventDate"/></td> 

哪些显示的日期时间正确。但是:

<td><xsl:value-of select="hours-from-dateTime(@EventDate)"/></td> 

不起作用。

最后,有更多的东西优雅比做:

<td><xsl:value-of select="hours-from-dateTime(@EventDate)"/>: 
<xsl:value-of select="minutes-from-dateTime(@EventDate)"/>: 
<xsl:value-of select="seconds-from-dateTime(@EventDate)"/></td> 

回答

2

感谢这两个建议,但因为我并不真的需要它作为一个日期时间变量,我只是把它作为一个字符串,并使用:

<xsl:value-of select="substring-after(@EventDate, ' ')"/> 
1

您开始的日期缺少时间分隔符'T',因此如果您想使用dateTime函数,则需要插入该时间分隔符。

我建议如下:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs fn" version="2.0" 
    xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
    <xsl:template match="/"> 
    <foo> 
     <xsl:variable name="time" select="translate(string(/input), ' ', 'T')"/> 
     <xsl:value-of select="fn:format-dateTime(xs:dateTime($time), '[h]:[m01]:[s01]')"/>   
    </foo> 
</xsl:template> 

这假定输入如下:

<input>2011-06-16 09:00:00</input> 

为了进一步参考,请参阅xslt20 spec中format-dateTime功能。使用“图片字符串”参数格式化日期时间值有很多不同的选项。

5

只需使用浇注或者构造函数:

<xsl:value-of select="xs:time(@dateTime)"/> 

这假定属性@datetime的类型是xs:日期时间为架构处理的结果。如果你没有运行模式感知处理器,您需要将它转换为XS:日期时间第一:

<xsl:value-of select="xs:time(xs:dateTime((@dateTime))"/> 

当然日期和时间之间的间隔必须是一个“T”为这工作。

相关问题