0
我想根據XML中的節點對節點和Sum進行分組。但是,無論ITEM如何,我的XSLT代碼都會對所有Cat_Code進行分組和彙總。 期望的O/P應該將ITEM下的所有Sub_Category節點分組,並將相同Cat_Code的AMOUNT總和。XSLT 1.0中的組和Sum節點值
下面ID XML源:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Entry>
<ITEM Id="1111">
<Category>Type CAT</Category>
<Manufacture_Date>2014-01-12</Manufacture_Date>
<Sub_Category>
<Cat_Code>01</Cat_Code>
<Expiry_Dt>2015-12-15</Expiry_Dt>
<Cat_Type>04W</Cat_Type>
<AMOUNT>100</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>02</Cat_Code>
<Expiry_Dt>2015-12-15</Expiry_Dt>
<Cat_Type>PENDCCER</Cat_Type>
<AMOUNT>50</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>03</Cat_Code>
<Expiry_Dt>2015-12-15</Expiry_Dt>
<Cat_Type>PENDCOER</Cat_Type>
<AMOUNT>50</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>04</Cat_Code>
<Expiry_Dt>2015-12-15</Expiry_Dt>
<Cat_Type>PENDCO</Cat_Type>
<AMOUNT>150</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>03</Cat_Code>
<Expiry_Dt>2014-08-15</Expiry_Dt>
<Cat_Type>PENDCOER</Cat_Type>
<AMOUNT>75</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>04</Cat_Code>
<Expiry_Dt>2014-08-15</Expiry_Dt>
<Cat_Type>PENDCO</Cat_Type>
<AMOUNT>75</AMOUNT>
</Sub_Category>
</ITEM>
<ITEM Id="1112">
<Category>Type CAT</Category>
<Manufacture_Date>2014-01-01</Manufacture_Date>
<Sub_Category>
<Cat_Code>01</Cat_Code>
<Expiry_Dt>2015-12-15</Expiry_Dt>
<Cat_Type>04W</Cat_Type>
<AMOUNT>100</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>02</Cat_Code>
<Expiry_Dt>2015-12-15</Expiry_Dt>
<Cat_Type>PENDCCER</Cat_Type>
<AMOUNT>50</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>05</Cat_Code>
<Expiry_Dt>2015-12-15</Expiry_Dt>
<Cat_Type>XPED</Cat_Type>
<AMOUNT>300</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>05</Cat_Code>
<Expiry_Dt>2014-08-15</Expiry_Dt>
<Cat_Type>XPED</Cat_Type>
<AMOUNT>250</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>03</Cat_Code>
<Expiry_Dt>2014-08-15</Expiry_Dt>
<Cat_Type>PENDCOER</Cat_Type>
<AMOUNT>50</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>04</Cat_Code>
<Expiry_Dt>2014-08-15</Expiry_Dt>
<Cat_Type>PENDCO</Cat_Type>
<AMOUNT>100</AMOUNT>
</Sub_Category>
</ITEM>
</Entry>
</Data>
預期輸出文件
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Entry>
<ITEM Id="1111">
<Category>Type CAT</Category>
<Manufacture_Date>2014-01-12</Manufacture_Date>
<Sub_Category>
<Cat_Code>01</Cat_Code>
<Cat_Type>04W</Cat_Type>
<AMOUNT>100</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>02</Cat_Code>
<Cat_Type>PENDCCER</Cat_Type>
<AMOUNT>50</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>03</Cat_Code>
<Cat_Type>PENDCOER</Cat_Type>
<AMOUNT>125</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>04</Cat_Code>
<Cat_Type>PENDCO</Cat_Type>
<AMOUNT>225</AMOUNT>
</Sub_Category>
</ITEM>
<ITEM Id="1112">
<Category>Type CAT</Category>
<Manufacture_Date>2014-01-01</Manufacture_Date>
<Sub_Category>
<Cat_Code>01</Cat_Code>
<Cat_Type>04W</Cat_Type>
<AMOUNT>100</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>02</Cat_Code>
<Cat_Type>PENDCCER</Cat_Type>
<AMOUNT>50</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>05</Cat_Code>Expiry_Dt>
<Cat_Type>XPED</Cat_Type>
<AMOUNT>550</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>03</Cat_Code>
<Cat_Type>PENDCOER</Cat_Type>
<AMOUNT>50</AMOUNT>
</Sub_Category>
<Sub_Category>
<Cat_Code>04</Cat_Code>Expiry_Dt>
<Cat_Type>PENDCO</Cat_Type>
<AMOUNT>100</AMOUNT>
</Sub_Category>
</ITEM>
</Entry>
</Data>
這裏是我的XSLT代碼
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="groupkey" match="Sub_Category" use="concat(../ITEM/Sub_Category, '+', Cat_Type)"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Data/Entry">
<xsl:for-each select="ITEM">
<ITEM>
<xsl:attribute name="Id">
<xsl:value-of select="@Id" />
</xsl:attribute>
<xsl:for-each select="Sub_Category[generate-id()=generate-id(key('groupkey',concat(../ITEM/Sub_Category, '+', Cat_Type))[1])]">
<xsl:copy>
<Cat_Code><xsl:value-of select="Cat_Code"/></Cat_Code>
<Cat_Type><xsl:value-of select="Cat_Type"/></Cat_Type>
<AMOUNT><xsl:value-of select="sum(key('groupkey',concat(../ITEM/Sub_Category, '+', Cat_Type))/AMOUNT)"/></AMOUNT>
</xsl:copy>
</xsl:for-each>
</ITEM>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
「*分組的項目下的所有Sub_Category節點和總和相同Cat_Code量*。」那麼爲什麼你的密鑰相連Sub_Category和Cat_Type? –
因爲我沒有我的預期結果,我嘗試了不同的組合。這裏是實際代碼 \t \t \t \t \t \t \t 的 –
user2992769