Subject: [xsl] Grouping & Muenchian Method Question From: "Albert Tsun" <albert.tsun@xxxxxxxxxxxx> Date: Wed, 3 Jan 2001 10:14:28 +0800 |
Hi Jenni, Hi, I am newbie to XSL grouping and I had tried your Muenchian Method about the "PROJECT" Example. I can use the key() and genrate-id() to get the first level grouping. It was fine. However, if I want to do second level grouping with the key() and generate-id() again, unexpected result come up. Please see my xsl scriptlets below. +++ XML +++ <?xml version="1.0" encoding="UTF-8"?> <SetDailySetRpt:DailySetRpt xmlns:SetDailySetRpt="http://www.excel.com.hk/settlement/setdailysetrpt/"> <SetDailySetRpt:SettleData> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>M</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange A</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>67890</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>HKD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>M</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange A</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>67890</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>HKD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>M</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange A</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>67890</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>USD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>M</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange A</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>67890</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>YEN</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>M</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange A</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>67890</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>USD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>M</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange B</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>12345</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>HKD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>U</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange B</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>12345</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>HKD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>U</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange C</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>12345</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>HKD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>U</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange C</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>12345</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>USD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>U</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange D</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>67890</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>USD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> </SetDailySetRpt:SettleItem> <SetDailySetRpt:SettleItem> <SetDailySetRpt:ServiceCode>M</SetDailySetRpt:ServiceCode> <SetDailySetRpt:ServiceDescription>Hello Hello</SetDailySetRpt:ServiceDescription> <SetDailySetRpt:ExchangeName>Exchange D</SetDailySetRpt:ExchangeName> <SetDailySetRpt:ExchangeCode>67890</SetDailySetRpt:ExchangeCode> <SetDailySetRpt:CCY>USD</SetDailySetRpt:CCY> <SetDailySetRpt:SetDate>20001231</SetDailySetRpt:SetDate> <SetDailySetRpt:TradeNum>1234567</SetDailySetRpt:TradeNum> </SetDailySetRpt:SettleData> <SetDailySetRpt:Footer>** End Of Report **</SetDailySetRpt:Footer> </SetDailySetRpt:DailySetRpt> +++ XSL +++ <xsl:key name="exchange" match="SetDailySetRpt:DailySetRpt/SetDailySetRpt:SettleData/SetDailySetRpt: SettleItem" use="concat(SetDailySetRpt:ExchangeName, ' ', SetDailySetRpt:ExchangeCode)"/> <xsl:key name="service_row" match="SetDailySetRpt:DailySetRpt/SetDailySetRpt:SettleData/SetDailySetRpt: SettleItem" use="SetDailySetRpt:ServiceCode"/> <xsl:template match="SetDailySetRpt:DailySetRpt"> <xsl:apply-templates select="SetDailySetRpt:SettleData"/> </xsl:template> <xsl:template match="SetDailySetRpt:SettleData"> <xsl:apply-templates select="SetDailySetRpt:SettleItem[generate-id(.)=generate-id(key('service_r ow',SetDailySetRpt:ServiceCode)[1])]"/> </xsl:template> <xsl:template match="SetDailySetRpt:SettleItem"> <xsl:value-of select="SetDailySetRpt:ServiceCode"/>&nl; <!-- This work fine <xsl:for-each select="key('service_row',SetDailySetRpt:ServiceCode)"> <xsl:value-of select="SetDailySetRpt:ExchangeName"/> <xsl:text> </xsl:text> <xsl:value-of select="SetDailySetRpt:CCY"/> &nl; </xsl:for-each> --> <xsl:variable name="service_items" select="key('service_row',SetDailySetRpt:ServiceCode)"/> <xsl:for-each select="$service_items[generate-id(.)=generate-id(key('exchange',concat(Set DailySetRpt:ExchangeName, ' ', SetDailySetRpt:ExchangeCode))[1])]"> <xsl:value-of select="SetDailySetRpt:ExchangeName"/> <xsl:text> </xsl:text> <xsl:value-of select="SetDailySetRpt:ExchangeCode"/>&nl; </xsl:for-each> </xsl:template> ++ My expected should look like ++ M Exchange A Exchange B Exchange D U Exchange B Exchange C Exchange D +++ However, the actual output from above XSL +++ M Exchange A Exchange B U Exchange C Exchange D Would you mind please give me some help or pointer ? Moreover, if I want to do more grouping and sorting, is it possible and how? Many Thanks in advance. XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Grouping and Key Usage Quesio, Albert Tsun | Thread | Re: [xsl] Grouping & Muenchian Meth, Jeni Tennison |
[xsl] Grouping and Key Usage Quesio, Albert Tsun | Date | [xsl] counting days, Rosa I-Ting Cheng |
Month |