On 2/23/06, yguaba(_at_)yahoo(_dot_)com(_dot_)br
<yguaba(_at_)yahoo(_dot_)com(_dot_)br> wrote:
Hello,
After some digging and experimenting, I finally got a stylesheet to
do what I wanted. Among other things, it uses the template below.
Problem is, I don't really understand WHY this template works, and
would very much like to.
Ooooohhhh boy. The random code messing to what might work.
Doesn't "position() > 1" evaluate to either 0 or 1?
Errr, no. It would either be true or false. ie
select="foo[position() > 1]"
can be read as "get all the children element of the current node that
are named foo and also have a position greater than one".
Since you are adding them in a sequence, you are adding the one with
position 1 to the result of the recursive call, so you only want those
that are after position 1.
I'm not sure if you are confusing the [] with some sort of array call.
It's a conditional, so using foo[1] is really short for
foo[position() = 1], which could actually be expanded more as well.
The other thing that might be confusing you is how you're manipulating
the node-set.
Say you have something like
<foo>
<el>1</el>
<el>2</el>
<el>3</el>
</foo>
The first time you call this function, you're passing in the node-set
(called node, a bit confusing). It contains three nodes, all of them
el.
Then the recursive function finds the value of the first el +
sum-value(second el, third el)
this is because both the second el and third el have positions greater
than 2, so they are put into a new node-set and passed along with the
$node param.
second pass
value of second el + sum-value (third el)
In the new node set, only the third el has a position greater than one
third pass
value of third + sum-value ()
now the node-set only has the third el, which has a position of 1
fourth pass
base case, return 0
empty node-set, return 0
0 + 3
3 + 2
5 + 1
6
Does any of this help?
Jon Gorman
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--