|
Subject: RE: [xsl] navigation, TEI From: <Jarno.Elovirta@xxxxxxxxx> Date: Wed, 23 Jun 2004 09:22:01 +0300 |
Hi,
> I'm working on extending the TEI xsl stylesheet set with a more
> complex 'prev-next' navigation bar. For the linking i need two
> parameters: the text of the link, and the id of the link.
> I use a template to get the appropriate node:
>
> <xsl:template name="getPrev">
> <xsl:variable name="nodeSet">
> <xsl:text>self::div0 | self::div1 | self::div2 |
> self::div3 | self::div4</xsl:text>
> </xsl:variable>
Here you're binding $nodeSet to a Result Tree Fragment and…
> <xsl:choose>
> <xsl:when test="(preceding-sibling::*[$nodeSet]/head)[last()]">
… here if will always return true. Either copy/paste the $nodeSet text into every place where it's used or use an entity instead of a variable.
> <xsl:copy-of select="preceding::*[$nodeSet]/head[last()]" />
> </xsl:when>
> <xsl:when test="(ancestor::*[$nodeSet]/head)[last()]">
> <xsl:copy-of select="ancestor::*[$nodeSet]/head[last()]" />
Note here that the test pattern and the copy expression do not select/match the same nodes, just like in the previous when block if the axes were the same.
> </xsl:when>
> <xsl:otherwise></xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
> and i call this with:
> <xsl:variable name="previous">
> <xsl:call-template name="getPrev" />
> </xsl:variable>
And again, you're binding $previous to a RTF.
> but as i would like to get the id of the node the following
> code doesn't work:
>
> <xsl:variable name="previousID">
> <xsl:value-of select="generate-id( $previous )" />
> </xsl:variable>
>
> with the xsl processor saying: 'generate-id() : invalid arg
> expecting a node-set'
> So i have to write another template (getPrevID) with the only
> difference of the selection:
> 'select="generate-id( ... )"'
>
> and the xpath expression
> (preceding-sibling::*[$nodeSet]/head)[last()]
> is the same than this:
> (preceding-sibling::*/head)[last()]
> the $nodeSet variable doesn't work at this situation.
How about
<xsl:template name="getPrevID">
<xsl:choose>
<!--here you don't need to test for the last, because it will be true even if you have just one div# head -->
<xsl:when test="preceding-sibling::*[self::div0 | self::div1 | self::div2 | self::div3 | self::div4]/head">
<xsl:value-of select="generate-id(preceding::*[self::div0 | self::div1 | self::div2 | self::div3 | self::div4]/head[last()])" />
</xsl:when>
<xsl:when test="ancestor::*[self::div0 | self::div1 | self::div2 | self::div3 | self::div4]/head">
<xsl:value-of select="generate-id(ancestor::*[self::div0 | self::div1 | self::div2 | self::div3 | self::div4]/head[last()])" />
</xsl:when>
</xsl:choose>
</xsl:template>
Cheers,
Jarno - Cenobita: Slaves
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| navigation, TEI, kirunews | Thread | RE: [xsl] navigation, TEI, Wendell Piez |
| Re: [xsl] Working with xs:date and , Colin Paul Adams | Date | Re: [xsl] alternate backgrounds pro, james walker |
| Month |