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