|
Subject: How to resolve the absolute location of a node From: "Jarno Elovirta" <jarnose@xxxxxxxxxx> Date: Sun, 17 Oct 1999 15:21:48 +0300 |
I'm trying to write a template that would return the absolute location path
of the node i'm processing. e.g. with processing the c elements of
> <a><b x="y"><c/></b><b x="z" p="q"><c/></b></a>
the templete would return
/a/b[1]/c[1] and /a/b[2]/c[1]
Modifying Clark's stylesheet to
<xsl:template name="resolver">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="concat('/',name())"/>
<xsl:text>[</xsl:text>
<xsl:value-of select="position()"/>
<xsl:text>]</xsl:text>
</xsl:for-each>
</xsl:template>
will not do it, since position() "returns a number equal to the context
position from the expression evaluation context" and returns /a[1]/b[2]/c[3]
for both c elements. i've been trying it with recurring templates such as
<xsl:template match="*" mode="resolver">
<xsl:param name="path" select="''"/>
<xsl:choose>
<xsl:when test="parent::*">
<xsl:apply-templates select="parent::*" mode="resolver">
<xsl:with-param name="path">
<xsl:text>/</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>[</xsl:text>
<xsl:value-of select="position()"/>
<xsl:text>]</xsl:text>
<xsl:value-of select="$path"/>
</xsl:with-param>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:text>/</xsl:text>
<xsl:value-of select="name()"/>
<xsl:value-of select="$path"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
but again this return what i don't want, /a/b[1]/c[1]. has anyone a solution
in their mind?
Jarno
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| ;) Was: Re: Accessing the element s, Clark C. Evans | Thread | Re: How to resolve the absolute loc, Clark C. Evans |
| Re: XSL:FO: Left ... Center ... Ri, Nikolai Grigoriev | Date | RE: Nostradamus (was Re: FO. lists , Reynolds, Gregg |
| Month |