Re: For-each loop or recursion
Aron, Existing code is very complex - big Cocoon project (and I started using XSLT 2 weeks ago, but have lots of experience in Java/C/C++), so I tried to keep concentrated on what I am doing: creating 2 templates to calculate the number of the first column to be displayed [first non-zero on either rebate1 and rebate2] and the last one [first occurrence of max number in either rebate1 or rebate2] 1 2 3 4 5 6 7 8 9 10 11 12 13 (sales volume) rebate1(%) 0 0 1 2 3 4 5 6 7 8 8 8 8 rebate2(%) 0 1 2 3 4 5 6 7 9 10 11 11 11 Need it be dynamically trimmed to display: 2 3 4 5 6 7 8 9 10 "11 or more" rebate1(%) 0 1 2 3 4 5 6 7 8 8 rebate2(%) 1 2 3 4 5 6 7 9 10 11 And var2 is rebate1, var3 is rebate2 So if it makes it any easier, we can call it mystruct/myarray1/myvar/rebate1 and mystruct/myarray2/myvar/rebate2 At this point I am interested in how to implement algorithms in XSLT: a) find out first non-zero on either rebate1 and rebate2 b) find out first occurrence of max number in either rebate1 or rebate2 So back to my questions: 1) How do I get a position of last occurrence of min ? 1a) Can I scan using for-each loop from the end of the sequence to the beginning ? 2) OK, lets try to get a position of the first occurrence when var2 = max node. What would be a correct ? <xsl:for-each select=mystruct/myarray1/myvar> <xsl:if select="rebate1=*[last()]"> <xsl:value-of select="position()"> </xsl:if> </xsl:for-each> 3) Expanding 2 for the rebate2 (var3) for the values from another (parallel) branch, would that work ? <xsl:for-each select=mystruct/myarray1/myvar> <xsl:if select="rebate1=*[last()] and ../../../myarray2/myvar/rebate2=*[last()]"> <xsl:value-of select="position()"> </xsl:if> </xsl:for-each> I think, that second *[last()] is wrong, I have to get a max of the rebate2 (second sequence) before that for-each loop. 3a) Can I calculate max of rebate2 like: <xsl:variable name="max2" select="mystruct/myarray2/myvar/rebate2[position()=last()]"> Is that the right way of assigning *[last()] to a variable ? All that is based on the assumption that rebate1 and rebate2 sequences are already in ascending order. Thank you, Oleg. On 5/16/05, Aron Bock <aronbock@xxxxxxxxxxx> wrote: > Oleg, please do really consider posting a sample of your XML; if your actual > XML is too verbose, make up a 5-liner that conceptually represents what you > want to do. And, no, you likely don't need loops or recursion. > > I wasn't going to post after *my* response with made-up data describing > accessing sibling values, but figured I would now even just to point out > that else, as you've seen, this can be slow going. > > Regards, > > --A > > >From: Oleg Konovalov <olegkon@xxxxxxxxx> > >Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > >To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > >Subject: Re: For-each loop or recursion > >Date: Mon, 16 May 2005 09:41:37 -0400 > > > >How do I get a position of last occurrence of min ? > > > >Do I have to use recursion? > >Can I scan using for-each from the end of the sequence > >to the beginning ? > > _________________________________________________________________ > Is your PC infected? Get a FREE online computer virus scan from McAfee(r) > Security. http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format