Re: [xsl] finding position in list of siblings

Subject: Re: [xsl] finding position in list of siblings
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Fri, 09 Jul 2004 15:57:58 -0400
Hi John,

At 02:56 PM 7/9/2004, you wrote:
I'm trying to find the context node's position relative to a list of identically named nodes. For example, given the following XML:

<?xml version="1.0" encoding="UTF-8"?>

I would like the 3 BROTHER nodes to show their position as 1,2,3 respectively rather than 3,4,5.

<xsl:template match="BROTHER">
   <xsl:value-of select="count(BROTHER/preceding-sibling::*)" />
   <xsl:value-of select="count(preceding-sibling::node()[.='BROTHER'])" />

Try "count(preceding-sibling::BROTHER) + 1"

The way XPath works is that a relative path (one not starting with '/') starts from the context node -- in a template matching "BROTHER" the context node will be each BROTHER picked up for processing in turn.

Starting at the context node, count the preceding siblings named BROTHER with preceding-sibling::BROTHER, add one, and that's the number you're after.

Alternatively, use the <xsl:number> instruction as a full-featured alternative that will let you count all kinds of things (such as brothers and sisters but not friends), get multi-leveled numbering (like 2.3.4), give the numbers special formatting, etc.

In this case, plain <xsl:number/> would get you exactly what you wanted with its various attributes ('count', 'level', 'format' etc.) left to their defaults.


====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================

Current Thread