如何总结xsl中的最近日期

时间:2015-05-19 13:15:35

标签: xml xslt xslt-1.0

输入如下:

   <Response>
     <item>
    <dt>20141106</dt>
    <nbr>33456</nbr>
    <cnt>2</cnt>
     </item>
     <item>
    <dt>20141107</dt>
    <nbr>33457</nbr>
    <cnt>1</cnt>
     </item>
      <item>
    <dt>20141207</dt>
    <nbr>33457</nbr>
    <cnt>3</cnt>
     </item>
      <item>
    <dt>20140507</dt>
    <nbr>33458</nbr>
    <cnt>1</cnt>
     </item>
      <item>
    <dt>20141109</dt>
    <nbr>33459</nbr>
    <cnt>1</cnt>
     </item>
      <item>
    <dt>20140407</dt>
    <nbr>33459</nbr>
    <cnt>7</cnt>
     </item>

    </Response>

我的输出应该如下,最新的dt和每个项目的计数总和。我需要为同一个nbr添加cnt值并给出最新的日期值。如何使用样式表使用xsl

输出看起来像

<Response>
 <item>
<dt>20141106</dt>
<nbr>33456</nbr>
<cnt>2</cnt>
 </item>    
  <item>
<dt>20141207</dt>
<nbr>33457</nbr>
<cnt>4</cnt>
 </item>
  <item>
<dt>20140507</dt>
<nbr>33458</nbr>
<cnt>1</cnt>
 </item>
  <item>
<dt>20141109</dt>
<nbr>33459</nbr>
<cnt>8</cnt>
 </item>
</Response>

1 个答案:

答案 0 :(得分:1)

试试这个:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="item">
     <xsl:if test="not(../item[nbr = current()/nbr and dt > current()/dt])">
       <xsl:copy>
         <xsl:apply-templates />
       </xsl:copy>
     </xsl:if>
   </xsl:template>

   <xsl:template match="cnt">
     <xsl:copy>
       <xsl:value-of select="sum(../../item[nbr = current()/../nbr]/cnt)"/>
     </xsl:copy>
   </xsl:template>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>