You can't define a match pattern that uses a variable.
In 1.0 you have to test the variable inside the template, e.g
<xsl:template match="text()">
<xsl:choose>
<xsl:when test="count(preceding::text() > $pos)">
Of course the variable must be global.
2.0 does allow a global variable to be used in the pattern.
A better solution in 2.0 is to use the ">>" operator:
<xsl:key name="t" match="text()[startswith(., 'Description')]"
use="'z'"/>
<xsl:template match="text()[. >> key('t', 'z')]
I can't see an easy way to emulate this in 1.0 with a solution that's
likely to have less than O(n^2) performance.
Michael Kay
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
fe(_dot_)sola(_at_)infomed(_dot_)sld(_dot_)cu
Sent: 27 August 2003 07:31
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] problem with variable and position()
This is part of the stylesheet...
<xsl:template match="html">
<xsl:apply-templates select="head"/>
<xsl:apply-templates select="body"/>
</xsl:template>
<xsl:template match="head"/>
<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>
<xsl:template match="text()[position()>$descPos]">
<xsl:value-of select="."/>
</xsl:template>
I have an xhtml document with a description as a text element
in the body. This
description text start with the word "Description" and it has
a variable position inside
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?
tia,
lizet
-------------------------------------------------
Este mensaje fue enviado usando el servicio de correo en web
de Infomed http://webmail.sld.cu
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list