Re: [xsl] XPath - How to select preceding nodes that are descendants of specific ancestor?

Subject: Re: [xsl] XPath - How to select preceding nodes that are descendants of specific ancestor?
From: Mike Trotman <mike.trotman@xxxxxxxxxxxxx>
Date: Sat, 26 Jun 2004 15:40:07 +0100
Thanks Ken.

I've given your example a quick test - and it does seem to be efficient - and better than my current interim solution:


<xsl:variable name='curridx' select='generate-id(descendant-or-self::LEAF[1])'/>
<xsl:variable name='leafset' select='ancestor::SUBTREE//LEAF'/>
<xsl:variable name='num_prev_leafs'>
<xsl:for-each select='$leafset'>
<xsl:if test='$curridx = generate-id(.)'><xsl:value-of select='position() - 1'/></xsl:if>
</xsl:for-each>
</xsl:variable>


I hadn't thought of using the <xsl:number> element in a variable definition before.
Probably because I cannot get a clear picture in my head of how <xsl:number> works.
I will investigate further.


However I now find I do need to know the number of previous LEAF nodes at other points in the SUBTREE hierarchy - when - as you point out - the number function will miss by one (? or more?).
Is there a modification to the <xsl:number> approach you can suggest (as this seems a lot more elegant than my current attempt) that would work from non-LEAF elements?


G. Ken Holman wrote:

At 2004-06-26 12:19 +0100, Mike Trotman wrote:

I have an XML document with multiple subtrees starting at element
'SUBTREE' containing 'LEAF' leaf element descendants at various
hierarchical depths.
I need to know - for each 'LEAF' element - how many preceding 'LEAF'
elements there are within the closest ancestor 'SUBTREE'.


I would treat it like figure numbering in a book, where the figures can be anywhere in preceding subtrees, and let the processor do the counting for you:

 <xsl:variable name="count-temp">
   <xsl:number count="LEAF" from="SUBTREE" level="any"/>
 </xsl:variable>
 <xsl:variable name="count" select="number($count-temp) - 1"/>

This won't be negative because you said you would be counting from a LEAF.

I hope this helps.

.................. Ken

--
Public training 3 days XSLT & 2 days XSL-FO: Phoenix,AZ 2004-08-23
World-wide on-site corporate, govt. & user group XML/XSL training.
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
Male Breast Cancer Awareness  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal


--+------------------------------------------------------------------ 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@xxxxxxxxxxxxxxxxxxxxxx> --+--


--
Datalucid Limited
8 Eileen Road
South Norwood
London SE25 5EJ
/ tel :0208-239-6810
mob: 0794-725-9760
email: mike.trotman@xxxxxxxxxxxxx
/
UK Co. Reg:   	4383635
VAT Reg.:   	798 7531 60



Current Thread