Subject: [xsl] How to simplify the xslt expression for multiple conditions From: "Yang" <sfyang@xxxxxxxxxxxxx> Date: Fri, 18 May 2001 09:35:26 +0800 |
Hi, Jeni, I hope you can help me on this; I am addressing a problem as follows; **to rank each salesperson of each store based on the sales amount on each day for the given month ** and find out I have to repeatedly apply the following lengthy and tedious expression for multiple filter conditions to the xslt codes. [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] As this piece of filter expression has to be hard-wired with each key function and sort function(it will not function correctly if using variable) , it concerns me the maintenance problems whenever new conditions have to be added. I would like to know is there a smart way to show me how to keep this coding update easily and cleanly. Thanks any help in advance. Sun-fu Yang, sfyang@xxxxxxxxxxxxx **** fyi - a piece of the my xsl with the multiple filter condition expressions *** <xsl:key name="dailySales" match="z:row" use="substring(@SalesOrderNo,12, 2)" /> <xsl:key name="storeSales" match="z:row" use="concat(substring(@SalesOrderNo,12, 2),':',@StoreCode)" /> <xsl:key name="dailySalesP" match="z:row" use="concat(substring(@SalesOrderNo,12, 2),':',@StoreCode,':',@Salesperson)" /> <xsl:for-each select="$MSource[@SalesOrderNo = key('dailySales',substring(@SalesOrderNo,12, 2)) [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] [1]/@SalesOrderNo]"> <xsl:sort select="substring(@SalesOrderNo,12, 2)" order="ascending" data-type="number"/> <xsl:variable name="thisPP" select="substring(@SalesOrderNo,12, 2)"/> <xsl:variable name="datas" select="key('dailySales',$thisPP) [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] "/> <xsl:for-each select="$datas [@SalesOrderNo = key('storeSales',concat($thisPP,':',@StoreCode)) [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] [1]/@SalesOrderNo]"> <xsl:sort select="sum(key('storeSales',concat($thisPP,':',@StoreCode)) [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] /@TotalSalesAmt)" order="descending" data-type="number"/> <xsl:variable name="storedatas" select="key('storeSales',concat($thisPP,':',@StoreCode)) [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] "/> <storename> <xsl:attribute name="amt"><!-- store amount --> <xsl:value-of select="sum($storedatas/@TotalSalesAmt)"/></xsl:attribute> <xsl:value-of select="@StoreCode"/> <xsl:for-each select="$storedatas [@SalesOrderNo = key('dailySalesP',concat($thisPP,':',@StoreCode,':',@Salesperson)) [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] [1]/@SalesOrderNo]"> <xsl:sort select="sum(key('dailySalesP',concat($thisPP,':',@StoreCode,':',@Salesperson )) [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] /@TotalSalesAmt)" order="descending" data-type="number"/> <salesname><xsl:attribute name="amt"> <xsl:value-of select="sum(key('dailySalesP',concat($thisPP,':',@StoreCode,':',@Salesperson ) [not(string($month)) or substring(@SalesOrderNo,10, 2) = $month] [not(string($dayID)) or substring(@SalesOrderNo,12, 2) = $dayID] [not(string($timeID)) or substring(substring-after(@CreateDate,'T'),1,2) = $timeID] [not(string($salesID)) or normalize-space(@SalesCode)=$salesID] [not(string($customerID)) or normalize-space(@CustomerCode)=$customerID] [not(string($storeID)) or normalize-space(@StoreCode)=$storeID] [not(string($salenoID)) or normalize-space(@SalesOrderNo)=$salenoID] /@TotalSalesAmt)"/></xsl:attribute> <xsl:value-of select="@Salesperson"/></salesname> </xsl:for-each> </storename> </xsl:for-each> </xsl:for-each> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] a very unusual namespace , Oliver Becker | Thread | Re: [xsl] How to simplify the xslt , Jeni Tennison |
Re: [xsl] a very unusual namespace , Steve Tinney | Date | Re: [xsl] Referencing nodes from an, Adam Turoff |
Month |