Xml 如何在XSLT1.0中计算时间差(持续时间)?
我使用xlstproc将一些xml文件转换为另一个xml格式文件,在转换过程中,我需要计算开始和结束字段之间的时间差值(持续时间以秒或分:秒为单位)Xml 如何在XSLT1.0中计算时间差(持续时间)?,xml,xslt,Xml,Xslt,我使用xlstproc将一些xml文件转换为另一个xml格式文件,在转换过程中,我需要计算开始和结束字段之间的时间差值(持续时间以秒或分:秒为单位) 。。。 2011-12-13 16:15:26 2011-12-13 16:17:27 … 我找到了一个模板语法,但未能使用它 <xsl:call-template name="date:duration"> <xsl:with-param name="seconds" select="number" />? </
。。。
2011-12-13 16:15:26
2011-12-13 16:17:27
…
我找到了一个模板语法,但未能使用它
<xsl:call-template name="date:duration">
<xsl:with-param name="seconds" select="number" />?
</xsl:call-template>
?
如果有人能给我一个如何实现目标的提示,我将不胜感激。提前谢谢 我帮你做了一些工作,发现了一些你似乎正在尝试使用的东西。但是,date:duration将秒数转换为duration格式的字符串,而您希望查找两个datetime字符串之间的差异(duration) 你可能会想要。 如果您阅读了,您会发现关于参数: 这两个日期必须都是其中一个中右截断的日期/时间字符串 [XML模式第2部分:数据类型]中定义的格式。。。允许的格式如下
xs:dateTime (CCYY-MM-DDThh:mm:ss)
...
原文中有斜体字:CCYY MM DDThh:MM:ss,但T没有斜体。换句话说,时间字符串在日期和时间之间需要一个文本T
,而您的字符串有一个空格
因此,我建议修复以下问题:
<start>2011-12-13T16:15:26</start>
<end>2011-12-13T16:17:27</end>
此代码假定上下文节点是
和
元素的父节点。在上述代码之后,变量$time diff sec
将包含一个结果树片段,如果需要,可以使用number($time diff sec)
将其转换为一个数字
让我们知道这是否有效。如果没有,请明确说明结果是什么,以及结果与您预期的不同
更新:
我刚刚注意到您正在使用xsltproc(它使用libxslt)。根据,libxslt本机支持date:difference
(和date:seconds
)。因此,您可以将这些函数作为函数调用,而不是定义命名模板并将其作为模板调用。这将大大减少您的代码量,尽管便携性较差:
<xsl:variable name="time-diff-sec"
select="date:seconds(date:difference(start, end))" />
更新2:
有关将日期字符串转换为秒数的可移植XSLT1.0模板,请参阅,该模板允许您轻松地从一个日期减去另一个日期。(感谢Sam B的评论)。不确定“模板语法”是什么意思。你是说你找到了一个模板,用来计算两个时间字符串之间的时间差?在任何情况下,如果您显示或链接到模板实现,并描述它是如何失败的,我们可能会帮助您。它与更新部分中的建议一起工作,非常感谢@卡尔博齐诺,不客气。很高兴这有帮助。如果答案解决了你的问题,请勾选“接受”复选框。另一个完美答案-
<xsl:variable name="time-diff-sec"
select="date:seconds(date:difference(start, end))" />
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
extension-element-prefixes="date">