2014-09-05 45 views
0

我需要添加两个时间,如下所示,作为在PNo上进行分组时的HHMMSS格式的RunningTime。在XSLT 1.0中使用分组添加两个日期时间

<root> 
<detail> 
<PNo>1</PNo> 
<RunningTime>000409</RunningTime> 
</detail> 
<detail> 
<PNo>1</PNo> 
<RunningTime>000409</RunningTime> 
</detail> 
<detail> 
<PNo>2</PNo> 
<RunningTime>000409</RunningTime> 
</detail> 
</root> 

它应该在XSLT 1.0中。

XSLT部分:

<RunningTime><xsl:value-of select="sum(key('program-by-no', PNo)/RunningTime)"/></RunningTime> 

但是这会增加时间总和不为DATETIME。

请帮忙。

+0

您必须先将其转换为普通的秒数值。 – 2014-09-05 18:57:56

回答

0

假设你是在Muenchian grouping过程中,而不是:

<RunningTime><xsl:value-of select="sum(key('program-by-no', PNo)/RunningTime)"/></RunningTime> 

做:

<RunningTime> 
    <xsl:call-template name="sum-times"> 
     <xsl:with-param name="times" select="key('program-by-no', PNo)/RunningTime"/> 
    </xsl:call-template> 
</RunningTime> 

和下面的模板添加到您的样式表:

<xsl:template name="sum-times"> 
    <xsl:param name="times"/> 
    <xsl:param name="sum" select="0"/> 
    <xsl:choose> 
     <xsl:when test="$times"> 
      <!-- add time as seconds --> 
      <xsl:variable name="summand" select="3600 * substring($times[1], 1, 2) + 60 * substring($times[1], 4, 2) + substring($times[1], 7, 2)"/> 
      <xsl:call-template name="sum-times"> 
       <xsl:with-param name="times" select="$times[position() > 1]"/> 
       <xsl:with-param name="sum" select="$sum + $summand"/> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <!-- convert seconds to time --> 
      <xsl:variable name="h" select="floor($sum div 3600)"/> 
      <xsl:variable name="m" select="floor($sum div 60) mod 60"/> 
      <xsl:variable name="s" select="$sum mod 60"/> 
      <xsl:value-of select="concat(format-number($h, '00'), format-number($m, ':00'), format-number($s, ':00'))" /> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

使用您的示例输入,您应该看到类似于以下的结果:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <program num="1"> 
     <RunningTime>00:08:18</RunningTime> 
    </program> 
    <program num="2"> 
     <RunningTime>00:04:09</RunningTime> 
    </program> 
</root> 
+0

非常感谢:) – user3419276 2014-09-06 17:00:38