|
Subject: AW: AW: [xsl] global variable and position() once more From: Markus Abt <abt@xxxxxxxx> Date: Fri, 29 Aug 2003 00:12:46 +0200 |
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: [xsl] 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: [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
>
-------------------------------------------------
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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Display order, Joseph Tan | Thread | Re: AW: AW: [xsl] global variable a, fe . sola |
| Re: AW: [xsl] global variable and p, fe . sola | Date | RE: [xsl] storing xsl in database?, Michael Kay |
| Month |