RE: [xsl] get immediat preceeding node, if it is a comment

Subject: RE: [xsl] get immediat preceeding node, if it is a comment
From: "Liao, John Teguh (John)" <jliao@xxxxxxxxxx>
Date: Mon, 7 Oct 2002 16:38:34 -0400
Hi list, the newbie needs help again ;)

I have something like this:

<table name='table1' etc. etc.>
  <item name='col1' aggrtype="bit" aggrinfo="bit1,bit2,bit3"/>
  <item name="bit1" etc. etc./>
  <item name="bit2" etc. etc./>
  <item name="bit3" etc. etc./>
</table>

When my context node is <item name="bit1" ... /> I want to print the
aggrinfo (actually the number of bit names in aggrinfo, but I think I know
how
to do that, now) if and only if the node before bit1 has aggrtype="bit".
I figured this has to do with using the post below, but when I tried it
it gave me nothing. Here's my xsl:

<xsl:if
test="preceding-sibling::node()[normalize-space][1]/@aggrtype='bit'">
  <xsl:value-of
select="preceding-sibling::node()[normalize-space][1]/@aggrinfo"/>
</xsl:if>

What did I do wrong?

thanks!

J.L.

-----Original Message-----
From: Joerg Heinicke [mailto:joerg.heinicke@xxxxxx]
Sent: Friday, October 04, 2002 7:57 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] get immediat preceeding node, if it is a comment




Andrew Welch wrote:
>>  preceding-sibling::node()[normalize-space()][1][self::comment()]
>>
>>  This will select the first in a list of nodes that return true for
>>  normalize-space() and self::comment().
>>
>>No, that would be
>>
>>preceding-sibling::node()[normalize-space()][self::comment()][1]
>>
>>What you have,
>>preceding-sibling::node()[normalize-space()][1][self::comment()]
>>
>>selects the first non-whitespace-text node if it is a comment.
> 
> 
> Sure.  But aren't they both the same (they select the same node)? The
> only difference would be the size of the lists the predicates create?
> (feel free to point out the correct terminology here)

Definitely no.

<root>
   <!--   test     -->
   <test1>test</test1>
   <test2>test</test2>
   <!--   test     -->
   <test3>test</test3>
   <test4>test</test4>
</root>

with context test4:

preceding-sibling::node() gets all other test elements and the comments and 
the whitespace only text nodes.

preceding-sibling::node()[normalize-space()] gets all other test elements 
and the comments.

preceding-sibling::node()[normalize-space()][1] gets test3.

preceding-sibling::node()[normalize-space()][1][self::comment()] gets 
nothing, because test3 isn't a comment.

preceding-sibling::node()[normalize-space()][self::comment()] gets all
comments.

preceding-sibling::node()[normalize-space()][self::comment()][1] gets the 
comment infront of test3.

But the original poster asked for immediately preceding comments. So only
preceding-sibling::node()[normalize-space()][1][self::comment()] is correct 
- with the danger of empty elements.

Regards,

Joerg

-- 

System Development
VIRBUS AG
Fon  +49(0)341-979-7419
Fax  +49(0)341-979-7409
joerg.heinicke@xxxxxxxxx
www.virbus.de

VIRBUS hat jetzt als erster deutscher Softwarehersteller die Zertifizierung 
für den 3D Secure-Authentifizierungsstandard "Verified by Visa" erhalten. 
Details unter 
http://www.virbus.de/de/press/pressemitteilung/20020828_verified_by_VISA.


 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