xsl-list
[Top] [All Lists]

RE: problem with variable and position()

2003-08-27 04:15:37
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