|
Subject: Re: AW: AW: [xsl] global variable and position() once more From: fe.sola@xxxxxxxxxxxxxx Date: Sun, 31 Aug 2003 17:24:31 -0400 |
Hi Markus and all,
Yep, that template worked fine, now I have a different problem and have been reading the
threads of "Incrementing Global variables"... The thing is I have to select each claim
on the document and enclose it in <claim></claim>
The input xhtml file looks like this:
<hr/> Claims<br/>
<br/> I claim: <br/>
<br/> 1. blah blah<br/>
<br/> more blah blah <br/>
<br/> 2. blah blah blah <br/>
<br/> more blah blah <br/>
<br/> 3. blah blah<br/>
<br/> more blah blah<br/>
<br/> 4. blah blah blah<br/>
<hr/> Description<br/>
and I need an xml output:
<Claims>
<Claim>1. blah blah more blah blah</Claim>
<Claim>2. blah blah blah more blah blah</Claim>
<Claim>3. blah blah more blah blah </Claim>
<Claim>4. blah blah blah </Claim>
</Claims>
The number of claims varies from document to document. I thought about removing the
<br/> tags with regexps to make things easier...
What I have so far:
<xsl:template match="preceding-sibling::text()[starts-with(normalize-space
(.), 'Claims')]
and following::text()[starts-with(normalize-space(.), 'Description']">
<xsl:variable name="counter">0</xsl:variable>
<xsl:for-each select="following-sibling::text()[starts-with
(normalized-space(.),'$counter+1')]">
<Claim>
<xsl:value-of select="normalize-space(.)"/>
</Claim>
</xsl:for-each>
</xsl:template>
But it gives me error with the Xpath expression due to the variable increment, what
should I use, a parameter?
tia,
lizet
Mensaje citado por Markus Abt <abt@xxxxxxxx>:
> 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
>
-------------------------------------------------
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 -> |
|---|---|---|
| AW: AW: [xsl] global variable and p, Markus Abt | Thread | AW: [xsl] Display order, Markus Abt |
| Re: [xsl] XSLT Cookbook - HELP, Wendell Piez | Date | [xsl] Node Values Contain Entities:, B K Partridge |
| Month |