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

AW: AW: global variable and position() once more

Subject: AW: AW: global variable and position() once more
From: Markus Abt <abt@xxxxxxxx>
Date: Fri, 29 Aug 2003 00:12:46 +0200
markus comet
Hi Lizet,

you can use a similar Xpath to check the following sibling axis for
checking the end condition and combining the two with "and":

<xsl:apply-templates select="html/body/node()[
    preceding-sibling::text()[starts-with(normalize-space(.), 'References')]
    and following-sibling::text()[starts-with(normalize-space(.), 'Description')]]"/>


Cheers,
Markus
__________________________
Markus Abt
Comet Computer GmbH
http://www.comet.de



----------
Von: 	fe.sola@xxxxxxxxxxxxxx
Gesendet: 	Donnerstag, 28. August 2003 23:02
An: 	xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Betreff: 	Re: AW:  global variable and position() once more

Hi Markus,
It worked fine, thanks. Now I'm doing a similar thing but taking the text nodes between 
a text node that starts with 'References' and the text node with 'Description', but it's 
a similar template...
again thanks,
lizet
Mensaje citado por Markus Abt <abt@xxxxxxxx>:

> 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
> 




-------------------------------------------------
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.