AW: [xsl] Matching two consecutive <br><br>

Subject: AW: [xsl] Matching two consecutive <br><br>
From: "stefan krause" <stefan.krause@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 23 Aug 2004 12:14:03 +0200
Thanks Micheal and David! It's always a pleasure asking question on this
list.

I tried my matching again with xalan and found it worked - strange, maybe I
had indeed some space between the <br/>.

Actually I don't understand completely what your matching does:
br[following-sibling::node()[1][self::br]]

Could you be so kind and translate the predicates into plain english to help
my understanding - I'm especially keen on knowing to which node "self" maps
and in which order the predicates are mapped to the node sets?

Thanks,
Stefan

-----Urspr|ngliche Nachricht-----
Von: Michael Kay [mailto:mhk@xxxxxxxxx]
Gesendet: Monday, August 23, 2004 11:47 AM
An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Betreff: RE: [xsl] Matching two consecutive <br><br>


>
> don't use name() in these kinds of tests:
> name(following-sibling::node()[1])='br'
> use
> following-sibling::node()[1][self::br]
>
> > But this does not work for Xalan 2.
>
> looks correct to me, when you say it didn't work, what did it
> do? error? wrong answer?

My guess is that there was a whitespace text node between the two <BR/>
elements, which MSXML silently ignored. You can replicate this behavior in a
conformant XSLT processor using <xsl:strip-space elements="*"/>, but you
probably don't want to, because it will also strip the space in

<p><b>Reason:</b> <i>not applicable</i></p>

Safer is to refine the test to be:

following-sibling::node()[not(self::text()[not(normalize-space(.))][1][self:
:br]

Michael Kay

Current Thread