xsl-list
[Top] [All Lists]

RE: [xsl] counting nodes before a certain node

2009-11-30 18:02:39

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(_at_)gmail(_dot_)com] 
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?

--~------------------------------------------------------------------
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>
--~--



--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>