Re: [xsl] 1st previous node()

Subject: Re: [xsl] 1st previous node()
From: "Imsieke, Gerrit, le-tex" <gerrit.imsieke@xxxxxxxxx>
Date: Tue, 08 Feb 2011 07:58:52 +0100
On 2011-02-08 07:16, Karl Stubsjoen wrote:
XSL1.0
I need help finding the first previous node, skipping white space,
comments, etc.. I thought this might work, but I can't get it or
similar tries to work.

<xsl:variable name="previous" select="preceding::node()
    [not(comment())]
    [not(text())]
    [not(processing-instruction())]
    [1]"/>

This can be written as


    <xsl:variable name="previous" select="preceding::node()
       [not(child::comment())]
       [not(child::text())]
       [not(child::processing-instruction())]
       [1]"/>

which will select the text node immediately preceding X.

So you could write

    <xsl:variable name="previous" select="preceding::node()
       [not(self::comment())]
       [not(self::text())]
       [not(self::processing-instruction())]
       [1]"/>

which will yield

<M>
   <?skip me?>
   <!--skip me-->
  </M>

for the first example and nothing in the second (since X doesn't have a preceding element: an element has to be closed before X starts in order to qualify as preceding).

But as Patrick points out, this can of course be written as

<xsl:variable name="previous" select="preceding::*[1]"/>

You can get M in the first case and B in the second by declaring

<xsl:variable name="previous" select="(preceding-sibling::*[1], ..)[1]" />

which selects the immediately preceding sibling or, if there is no preceding sibling, the parent element.

-Gerrit


Given that<X> is the context node then I expect the previous node is<M>.


<A>
  <M>
    <?skip me?>
    <!--skip me-->
   </M>
   <X>  this is context node</X>
</A>

Given that<X> is the context node then I expect the previous node is<B>.

<A>
  <B>
   <X>  this is context node</X>
  </B>
</A>



--
Karl Stubsjoen
MeetScoresOnline.com
(602) 845-0006


-- Gerrit Imsieke Geschdftsf|hrer / Managing Director le-tex publishing services GmbH Weissenfelser Str. 84, 04229 Leipzig, Germany Phone +49 341 355356 110, Fax +49 341 355356 510 gerrit.imsieke@xxxxxxxxx, http://www.le-tex.de

Registergericht / Commercial Register: Amtsgericht Leipzig
Registernummer / Registration Number: HRB 24930

Geschdftsf|hrer: Gerrit Imsieke, Svea Jelonek,
Thomas Schmidt, Dr. Reinhard Vvckler

Current Thread