从xsl1.0上的DateTime字符串中提取时间



我有一个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"/>

我只需要在html输出中提取@DepartmentDateTime和@ArrivalDateTime的时间。到目前为止,我制作了一个xsl:for-each和一个返回完整字符串的xsl:value,但我尝试使用了来自dateTime的fn:hours,但它不起作用。要么我做错了什么,要么它只适用于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>

提前谢谢。

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

<Root>
<myDate>2014-05-01T07:24:00</myDate>
</Root>

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

<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>

我需要在日期字符串中使用完整的月份名称,所以使用以下样式表进行查找。尽管我从未设法让month值的子字符串函数在查找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>

对于您想要的,这将给您一个快速的结果:

<td>
    <xsl:value-of select="substring-after(@DepartureDateTime, 'T')"/>
</td>

如果你把它放在一个变量中,那么如果需要的话,你可以使用substring函数来提取时间的各个分量。

相关内容

  • 没有找到相关文章

最新更新