从 xsl 1.0 上的 DateTime 字符串中提取时间

Rod*_*dez 1 xml xslt datetime extract xslt-1.0

我有一个充满这些节点的 xml 文件:

<FlightSegment DepartureDateTime="2014-05-02T14:24:00" ArrivalDateTime="2014-05-02T15:42:00"/>
<FlightSegment DepartureDateTime="2014-05-02T16:24:00" ArrivalDateTime="2014-05-02T17:42:00"/>
Run Code Online (Sandbox Code Playgroud)

我只需要在 html 输出中提取 @DepartureDateTime 和 @ArrivalDateTime 的时间。到目前为止,我制作了一个 xsl:for-each 和一个返回完整字符串的 xsl:value-of,但我尝试使用 fn:hours-from-dateTime 并且它不起作用。要么我做错了什么,要么只在 2.0 中有效。我怎样才能从这个字符串中获得时间?

这是我的代码:

<table>
        <xsl:for-each select="FlightSegment">
            <tr>
                <td>
                  Departure:
                </td>
                <td>
                   <fn:hours-from-dateTime(xsl:value-of select="@DepartureDateTime")/>:<fn:minutes-from-dateTime(xsl:value-of select="@DepartureDateTime")/>:<fn:seconds-from-dateTime(xsl:value-of select="@DepartureDateTime")/>
                </td>
            </tr>
            <tr>
                <td>
                   Arrival:
                </td>
                <td>
                   <fn:hours-from-dateTime(xsl:value-of select="@ArrivalDateTime")/>:<fn:minutes-from-dateTime(xsl:value-of select="@ArrivalDateTime")/>:<fn:seconds-from-dateTime(xsl:value-of select="@ArrivalDateTime")/>
                </td>
            </tr>
        </xsl:for-each>
</table>
Run Code Online (Sandbox Code Playgroud)

提前致谢。

小智 5

用于从以下内容中提取日期和时间:

<Root>
<myDate>2014-05-01T07:24:00</myDate>
</Root>
Run Code Online (Sandbox Code Playgroud)

我使用以下函数来获取数据或转换为其他格式:

<p>
Extract just the date: <br />
<xsl:value-of select="substring(/Root/myDate, 1, 10)" />
</p>

<p>
Extract just the time: <br />
<xsl:value-of select="substring(/Root/myDate, 12, 5)" />
</p>

<p>Convert to Short date format dd-MM-yyyy: <br />
<xsl:value-of select="concat(substring(/Root/myDate, 9, 2), '-', substring(/Root/myDate, 6, 2), '-', substring(/Root/myDate, 1, 4))" />
</p>
Run Code Online (Sandbox Code Playgroud)

我需要在日期字符串中使用完整的月份名称,因此请使用以下样式表进行查找。尽管我从未设法让月份值的子字符串函数在查找 xpath 中的 [ ] 内工作,但它从未对我使用变量产生的结果的性能产生影响。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:lookup="http://any.com/lookup" exclude-result-prefixes="lookup">
    <xsl:output method="html" indent="yes" encoding="UTF-8" />
    <xsl:decimal-format name="NN" NaN="-" />
    <lookup:Months>
        <Month index="01" string="January" />
        <Month index="02" string="February" />
        <Month index="03" string="March" />
        <Month index="04" string="April" />
        <Month index="05" string="May" />
        <Month index="06" string="June" />
        <Month index="07" string="July" />
        <Month index="08" string="August" />
        <Month index="09" string="September" />
        <Month index="10" string="October" />
        <Month index="11" string="November" />
        <Month index="12" string="December" />
    </lookup:Months>
    <xsl:template match="/">
        <html>
            <body>
                <p>
                    Convert to Long date format dd-MMM-yyyy: <br />
                    <xsl:variable name="myMonth" select="substring(/Root/myDate, 6, 2)" />
                    <xsl:value-of select="concat(substring(/Root/myDate, 9, 2), ' ', document('')/*/lookup:Months/Month[@index=$myMonth]/@string, ' ',  substring(/Root/myDate, 1, 4))" />
                </p>
            </body>
        </html>

    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)