Subject: AW: [xsl] global variable and position() once more From: Markus Abt <abt@xxxxxxxx> Date: Thu, 28 Aug 2003 22:00:41 +0200 |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] storing xsl in database?, Rod Humphris - FLPTN | Thread | Re: AW: [xsl] global variable and p, fe . sola |
RE: [xsl] Question about Page-Maste, Wendell Piez | Date | Re: [xsl] storing xsl in database?, fe . sola |
Month |