xsl-list
[Top] [All Lists]

RE: global variable and position() once more

2003-08-28 15:54:55
 <xsl:apply-templates select="text()[position()>$descPos]"/>

That won't work, it's only selecting text nodes that are children of the
html element, and they are all white space.

Anyway, $descPos isn't a position, it's a text node.

If $descPos2 were defined as

<xsl:variable name="descPos2"
select="count($descPos/preceding::text()+1)"/>

then you could select all text nodes that follow it using:

select="(//text)[position() > $descPos2]

but you can do that much more easily as:

  <xsl:apply-templates select="$descPos/following::text()"/>

However, I suspect you don't only want to process the text nodes, you
also want to process their containing elements.

Trouble is, I'm not really sure what you DO want to do.

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: 28 August 2003 16:54
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] global variable and position() once more


Hello, being a newbie is a pain...
I decided to try Michael Kay's suggestion of using a global 
variable. My problem is that 
I need to select the text nodes after a text node that starts 
with the 
word 'Description'.
The xhtml looks more or less like this: (This is a simplified 
sample version, could 
provide the real one on request)

<html>
   <head>
      <!--Something here-->
   <head>
   <body>
        blah bla blah
        <table>
          <!-- something here-->
        </table>
        Description
        <table>
          <!-- something here-->
        </table>
        text nodes to select with the description text
        
   </body>
</html>  

My xsl stylesheet looks like this:
...
<xsl:template match="/">
                ... 
              <Document>
                  <xsl:apply-templates select="html"/>
              </Document>
                ...  
</xsl:template>
...
<xsl:variable name="descPos" 
select="//text()[starts-with(normalize-space
(),'Description')]"/>
...
<xsl:template match="html">
                <xsl:element name="description">
                       <xsl:apply-templates 
select="text()[position()>$descPos]"/>
                </xsl:element>
...
</xsl:template>
...
I can't manage to store in the descPos global variable the 
position of the node that 
starts with 'Description', when I try 
select="//text()[starts-with(normalize-space
(),'Description')position()] or try to get the position 
function somewhere in that XPath 
expression I get errors.
So far the descPos variable gets a wrong value, always 1 and 
the mentioned text node has 
a position 30 or more on some other input documents.
thanks a lot for looking at this, 
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