我有一个XML属性<EventDate>2011-06-16 08:00:00</EventDate>
,我想使用XSLT提取08:00:00
。
我感谢w3schools感谢fn:hours-from-dateTime(datetime)
。所以我想知道,为什么没有fn:time-from-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>
答案 0 :(得分:6)
只需使用强制转换或构造函数:
<xsl:value-of select="xs:time(@dateTime)"/>
这假定属性@dateTime是模式处理的xs:dateTime类型。如果您没有运行架构感知处理器,则需要首先将其强制转换为xs:dateTime:
<xsl:value-of select="xs:time(xs:dateTime((@dateTime))"/>
当然,日期和时间之间的空间需要为“T”才能发挥作用。
答案 1 :(得分:2)
感谢这两个建议,但由于我并不真的需要它作为dateTime变量,我只是将其视为一个字符串并使用:
<xsl:value-of select="substring-after(@EventDate, ' ')"/>
答案 2 :(得分: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规范中的format-dateTime函数。使用“图片字符串”参数格式化日期时间值有许多不同的选项。