[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: AW: AW: global variable and position() once more
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: 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 > ------------------------------------------------- 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|