如何在xslt中添加两个时间戳值

时间:2011-04-15 07:07:26

标签: xml xslt

<LogFormat> 
 <TestHeading>
    <TestName>abc</TestName>
    <TestDuration>00:08:80</TestDuration>
  <TestHeading>
  <TestHeading>
    <TestName>pqr</TestName>
    <TestDuration>00:00:10</TestDuration>
  <TestHeading>
<LogFormat>

我想添加xml文件的所有TestDuration标记(即00:00:10和00:08:80)。 我检查了'Summing numbers with comma as decimal separator in XSLT?',但它没有用。 请帮助别人.. 提前谢谢..

1 个答案:

答案 0 :(得分:0)

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:template match="LogFormat">
        <xsl:apply-templates select="TestHeading[1]"/>
    </xsl:template>
    <xsl:template match="TestHeading">
        <xsl:param name="pSum" select="0"/>
        <xsl:variable name="vNext"
         select="following-sibling::TestHeading[1]"/>
        <xsl:variable name="vSum"
         select="$pSum + substring(TestDuration,1,2) * 3600
                       + substring(TestDuration,4,2) * 60
                       + substring(TestDuration,7)"/>
        <xsl:apply-templates select="vNext">
            <xsl:with-param name="pSum" select="$vSum"/>        
        </xsl:apply-templates>
        <xsl:if test="not(vNext)">
            <xsl:value-of
             select="concat(format-number(floor($vSum div 3600),'00'),
                            ':',
                            format-number(floor($vSum mod 3600 div 60),'00'),
                            ':',
                            format-number($vSum mod 60,'00'))"/>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

输出:

00:09:20