[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

AW: global variable and position() once more

Subject: AW: global variable and position() once more
From: Markus Abt <abt@xxxxxxxx>
Date: Thu, 28 Aug 2003 22:00:41 +0200
xsl global variable
Hi,

if you want output everything after the "Description" text node, try this:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <Document>
    <!-- select all nodes after the Description text node -->
    <xsl:apply-templates select="html/body/node()[preceding-sibling::text()[starts-with(normalize-space(.), 'Description')]]"/>
  </Document>
</xsl:template>

<!-- copy all nodes with their descendants. Adjust to your needs -->
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>


The Xpath works as follows:
-  html/body/node() selects all child nodes of the body element.
-  [ ... ] gives a condition to the previous selection.
   It is tested for every selected node.
-  preceding-sibling::text() selects all preceding siblings (for every selected node above).
-  starts-with(normalize-space(.), 'Description') tests for the "Description" text node.
   It is tested for every preceding sibling.
-  So, preceding-sibling::text()[starts-with(normalize-space(.), 'Description')]
   selects only this node.
-  If there is such a preceding sibling, the outer condition ([...]) is true.
-  The result is, only the html/body/node() with this condition true are selected.
-  apply-templates then processes this nodes.

The second template just copies everythig through, discard it, if you have
your own templates to handle further processing.


Hope this helps,
Markus
__________________________
Markus Abt
Comet Computer GmbH
http://www.comet.de


----------
Von: 	fe.sola@xxxxxxxxxxxxxx
Gesendet: 	Donnerstag, 28. August 2003 17:53
An: 	xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Betreff: 	RE:  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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.