RE: [xsl] Determining the context node

Subject: RE: [xsl] Determining the context node
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Thu, 13 Apr 2006 11:29:09 -0400
Hi,

At 06:23 AM 4/13/2006, Mike wrote:
You can get the name of the context node using name(). Saxon has an
extension function saxon:path() which gives you a full path to a node; I
believe there are portable solutions to this problem at

http://www.dpawson.co.uk/xsl/sect2/N6077.html

but it seems to be down.

Here's some simple code to write an XPath for any element:


<xsl:template match="*" mode="make-path">
  <xsl:apply-templates select="ancestor-or-self::*" mode="make-step"/>
</xsl:template>

<xsl:template match="*" mode="make-step">
  <xsl:text>/</xsl:text>
  <xsl:value-of select="name()"/>
  <xsl:if test="(preceding-sibling::*|following-sibling::*)
                [name()=name(current())]">
    <xsl:text>[</xsl:text>
    <xsl:number/>
    <xsl:text>]</xsl:text>
  </xsl:if>
</xsl:template>

I leave it as an exercise how to extend this to handle attributes, the root, etc.

Cheers,
Wendell


====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx 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 ======================================================================

Current Thread