我有一个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
函数来提取时间的各个分量。