输入如下:
<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>
答案 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>