RE: [xsl] counting nodes before a certain node

Subject: RE: [xsl] counting nodes before a certain node
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 30 Nov 2009 23:02:07 -0000
Given XSLT 2.0, you can select two elements $a and $b, and then the number
of elements between these two is

count($b/preceding-sibling::*) - count($b/preceding-sibling::*) - 1

This is probably more efficient than

count(*[. >> $a and $b >> .])

but you can use that if it's more convenient.

(I'm assuming that by "between" you mean "between and on the same level".
That is, the number of elements between <a/> and <b/> in

<a/><node><child/></node><b/>

is one.)

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay 


> -----Original Message-----
> From: a kusa [mailto:akusa8@xxxxxxxxx] 
> Sent: 30 November 2009 22:40
> To: xsl-list
> Subject: [xsl] counting nodes before a certain node
> 
> Hi
> 
> How do I count nodes up to a certain point in XSLT?
> 
> Example:
> 
> My xml file looks like this:
> 
> <books>
> <book>
> <title>First title</book>
> </book>
> <notes>The following books talk about history.</notes> 
> <notes>For further information please log on to </notes> 
> <notes>Thank you for choosing.. </notes> <book> 
> <title>Abraham Lincoln </title> </book>
> 
> <authors>
> sample data
> 
> </authors>
> <notes>Please call... </notes>
> <notes>Copyright Information </notes>
> <book>
> 
> sample data
> </book>
> </books>
> 
> In my XSLT file, I want to count all <notes> just before the 
> second <book> element but immediately after the first book 
> element or just after <authors>.
> 
> How do I count all the notes elements here?

Current Thread