Re: [xsl] Whitelist preceding siblings

Subject: Re: [xsl] Whitelist preceding siblings
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Fri, 15 Apr 2011 14:55:53 +0100
match="x[not(preceding-sibling::*[not(self::A|self::B|self::C])]"

or if you prefer

match="x[every $p in preceding-sibling::* satisfies $p/(self::A | self::B | self::C)]"

Michael Kay
Saxonica

On 15/04/2011 14:43, Fredrik Bengtsson wrote:
Hi,

I need to select elements (using XPath) that are preceded by sibling elements that are not in a given whitelist. That is, I need to find elements named x, whose preceding siblings (if any) are all named a, b or c, in any order, and all optional, but nothing else. So the following is a match:

<c/>
<b/>
<x/>

And so is this:

<x/>

But not this one:

<c/>
<BLOCKER/>
<a/>
<x/>

I've tried something like the following with no luck:

<xsl:template match="x">  ...
<xsl:template match="x[preceding-sibling::*][not(self::a or self::b or self::c)]">  ...

Any ideas?
Regards,
/Fredrik

Current Thread