我試圖在xml中使用xslt 2.0來總結數量字段,它將輸出我的設備中有一個設備的數量與多個條目,而不會被設備組求和。任何關於如何解決這個問題的想法?使用XSLT 2.0和分組總結數量
這是我使用XSLT:
<xsl:for-each-group select="//node()" group-by="*[local-name()='lin_id']/text()">
<Results>
<xsl:element name="LIN_ID"><xsl:value-of select="*[local-name()='lin_id']"/></xsl:element>
<xsl:element name="Count"><xsl:value-of select="sum(current-group()/*[local-name()='qty'])"/></xsl:element>
</Results>
</xsl:for-each-group>
這裏的源XML文件:
<Equipment>
<lin_id>C18312</lin_id>
<qty>5</qty>
</Equipment>
<Equipment>
<lin_id>C18345</lin_id>
<qty>22</qty>
</Equipment>
<Equipment>
<lin_id>C18378</lin_id>
<qty>43</qty>
</Equipment>
<Equipment>
<lin_id>C18378</lin_id>
<qty>208</qty>
</Equipment>
而這裏的輸出是什麼目前:
<Results>
<LIN_ID>C18312</LIN_Name>
<Count>5</Count>
</Results>
<Results>
<LIN_ID>C18345</LIN_Name>
<Count>22</Count>
</Results>
<Results>
<LIN_ID>C18378</LIN_Name>
<Count>43</Count>
</Results>
所以你可以看到它正在進行分組,但是對於LIN_ID C18378,它應該將兩個條目的數量相加並輸出計數但它只是顯示其中的一個值。
我猜//節點()得到的是當前節點?我不知道。我繼承了這個xslt文件,並且正在學習,所以我不會在bordeline可怕的陳述中冒犯。我不得不同意其他一些xslt文件混合使用名稱空間聲明,我不知道還有什麼。你給我的工作很好。謝謝! – John81 2009-11-12 17:42:15
否,// node()在整個文檔中選擇*每個單個節點*。 *一切*。你應該在XPath上做一些閱讀。 ;-)另外,「邊緣恐怖」也有笑臉。如果我的答案有效,可以將其標記爲已接受。 –
Tomalak
2009-11-12 19:05:38
Gotcha。我想將它標記爲答案,但我需要15個聲望並且只有10個聲望。當我有幾點時,我會回來做。 – John81 2009-11-13 22:18:56