|
Subject: RE: [xsl] problem with variable and position() From: Jarno.Elovirta@xxxxxxxxx Date: Wed, 27 Aug 2003 09:58:17 +0300 |
Hi,
> <xsl:template match="body">
> <xsl:element name="description">
> <xsl:apply-templates
> select="text()[starts-with(normalize-space
> (),'Description')]" mode="description"/>
> </xsl:element>
> </xsl:template>
> <xsl:template
> match="text()[starts-with(normalize-space(),'Description')]"
> mode="description">
> <xsl:variable name="descPos"
> select="position()"/>
> <xsl:apply-templates
> select="text()[position()>$descPos]"/>
>
> </xsl:template>
This template could as well be simply
<xsl:template match="text()" mode="description">
<xsl:variable name="descPos" select="position()"/>
<xsl:apply-templates select="text()[position()>$descPos]"/>
</xsl:template>
unless you have multiple different templates that match text nodes in "description" mode.
> <xsl:template match="text()[position()>$descPos]">
> <xsl:value-of select="."/>
> </xsl:template>
And this should be
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
or, you don't even need this, because the build-in template rule will take care of it
> the input documents. I tried to store the position of the
> description text in the
> descPos variable to use it later, but the above stylesheet
> gives me an error of "Invalid
> variable reference". How could I re-write the last template
> so I avoid this error?
For one, the descPos variable will be out of scope in the other template -- see the XSLT spec for variable scope. Also, variable references are not allowed in match patterns.
Cheers,
Jarno
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] global variable and posit, Michael Kay | Thread | RE: [xsl] problem with variable and, fe . sola |
| [xsl] problem with variable and pos, fe . sola | Date | [xsl] recursion with xsl:apply-temp, Volker Witzel |
| Month |