2011-04-15 19 views
1
<LogFormat> 
<TestHeading> 
    <TestName>abc</TestName> 
    <TestDuration>00:08:80</TestDuration> 
    <TestHeading> 
    <TestHeading> 
    <TestName>pqr</TestName> 
    <TestDuration>00:00:10</TestDuration> 
    <TestHeading> 
<LogFormat> 

我要添加的所有TestDuration標籤的XML文件(即00:00:10和00:08:80)添加兩個時間戳值。 和我檢查'Summing numbers with comma as decimal separator in XSLT?',但它沒有奏效。 請幫助別人.. 在此先感謝..如何在XSLT

+2

這是XSLT 1.0或2.0? 2.0具有廣泛的日期/時間算術功能,而1.0沒有 - 儘管您可以查看www.exslt.org上提供的擴展。 – 2011-04-15 11:00:51

回答

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

+1。運氣不好可能需要這個:/ – Flack 2011-04-18 05:24:42

+0

@Flack:請注意,即使使用XSLT/XPath 2.0,您也必須執行一些不會從此'xs:time'到某些'xs:duration'的隱式轉換。 – 2011-04-18 13:13:14