xsl-list
[Top] [All Lists]

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

2004-06-26 07:58:35
Aplogies Ken - please ignore this request.
I'm being really dumb and mis-reading you're explanation of negative vs. <xsl:number> - instead of vs. the '-1'.

Mike Trotman wrote:

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(_at_)CraneSoftwrights(_dot_)com
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--




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




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