Re: [xsl] Test for preceding-sibling and text

Subject: Re: [xsl] Test for preceding-sibling and text
From: "Ragulf Pickaxe" <jawxml@xxxxxxxxxxx>
Date: Fri, 12 Nov 2004 13:23:25 +0000
Hi again,

Following the discussion in the "characters in xsl" thread, I tried changing
"*" with "node()" in the XPath, that is:
"not(preceding-sibling::*[1][self::A])" became
"not(preceding-sibling::node()[1][self::A])"


This seems to work. Will there be any reason that this should not?

well it depends on your meaning of "work".
they are both legal Xpath expressions, so neither will cause an error,
but they test different things, it's hard to say whether either is the
test you want (without going back down the thread to see if there was
more info there)

given

zzz <A/> zzz <B/> zzz <A/><C/>

the first expression is false in <B/> and false on <C/>
the second expression is true on <B/>  and false on <C/>

David

The test is only done in a template matching "A" nodes.


What I wanted was to group adjacent A nodes:
<X>zzz<A/><A/><B/><A/>xxx<A/></X>

The first test would chose the first and third <A/> nodes, whereas I would want the first, third and fourth <A/> nodes. The second one seemes to do that.

<xsl:template match="A" mode="one">
 <xsl:if test="not(preceding-sibling::*[1][self::A])">1</xsl:if>
</xsl:template>

<xsl:template match="A" mode="two">
 <xsl:if test="not(preceding-sibling::node()[1][self::A])">2</xsl:if>
</xsl:template>

My question was then, whether there is something that I have missed...

Regards,
Ragulf Pickaxe :-)

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now! http://toolbar.msn.com/


Current Thread