xsl-list
[Top] [All Lists]

Re: finding position in list of siblings

2004-07-09 12:57:58
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"?>
<FAMILY>
  <SISTER/>
  <SISTER/>
  <BROTHER/>
  <BROTHER/>
  <BROTHER/>
</FAMILY>

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'])" />
</xsl:template>

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.

Cheers,
Wendell


======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
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
======================================================================