Subject: RE: 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: 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
|