4

我有一个 XML 属性,<EventDate>2011-06-16 08:00:00</EventDate>我想08:00:00使用 XSLT 进行提取。

我看到fn:hours-from-dateTime(datetime)感谢w3schools。所以我想知道,为什么没有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>

?

4

3 回答 3

6

只需使用强制转换或构造函数:

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

这假定属性 @dateTime 的类型为 xs:dateTime 作为模式处理的结果。如果您没有运行模式感知处理器,则需要先将其转换为 xs:dateTime :

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

当然,日期和时间之间的空格必须是“T”才能正常工作。

于 2011-06-17T09:56:48.683 回答
2

感谢这两个建议,但由于我并不真正需要它作为 dateTime 变量,我只是将它视为一个字符串并使用:

<xsl:value-of select="substring-after(@EventDate, ' ')"/>
于 2011-06-17T13:55:08.373 回答
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函数。使用“图片字符串”参数格式化日期时间值有许多不同的选项。

于 2011-06-16T21:14:29.413 回答