|
Subject: RE: [xsl] problem with variable and position() From: fe.sola@xxxxxxxxxxxxxx Date: Wed, 27 Aug 2003 17:42:56 -0400 |
Hello Jarno and Michael, thanks for your quick response.
I still have troubles with this template, I realized I can't use a variable on a match
expression and it is a bad practice to use a global one, re-wrote the template but still
no good.
The input xhtml documet has several text nodes, one of them starts with the
word "Description", I should be able to select all the text nodes that have a position
higher than that one and put it on a single description element.
The templates I rewrote are:
<xsl:template match="body">
<!-- some templates here for the rest of the text nodes-->
<xsl:element name="description">
<xsl:apply-templates select="text()[starts-with(normalize-space
(),'Description')]"/>
</xsl:element>
</xsl:template>
<xsl:template match="text()[starts-with(normalize-space(),'Description')]">
<xsl:variable name="descPos" select="position()"/>
<xsl:apply-templates select="text()[position()>$descPos]"/>
</xsl:template> and hoped the built in templates would work but the <description> tag
won't get any value after the transformation...
tia, lizet
Mensaje citado por Jarno.Elovirta@xxxxxxxxx:
> 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
>
-------------------------------------------------
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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] problem with variable and, Jarno . Elovirta | Thread | [xsl] recursion with xsl:apply-temp, Volker Witzel |
| RE: [xsl] Incrementing a Global var, Americo Albuquerque | Date | RE: [xsl] Variable - Results Tree F, Martinez, Brian |
| Month |