Dear list,
I am facing an XPath problem for which I cannot find the solution. I 
want to select all following sibling elements of name "foo" up to the 
first non-"foo" element. So, in the following case, the first two <foo> 
elements should be selected:
<foo/>
<foo/>
<bar/>
<foo/>
In the following case, all three <foo> elements should be selected:
<foo/>
<foo/>
<foo/>
And in the following case, nothing should be selected:
<bar/>
<foo/>
<foo/>
I came up with the following non-working approach:
B B B  B B B  B B B  <xsl:choose>
B B B  B B B  B B B  B B B  <xsl:when test="not(following-sibling::*[not(self::foo)])">
B B B  B B B  B B B  B B B  B B B  <xsl:value-of select="following-sibling::*"/>
B B B  B B B  B B B  B B B  </xsl:when>
B B B  B B B  B B B  B B B  <xsl:otherwise>
B B B  B B B  B B B  B B B  B B B  <xsl:value-of 
select="following-sibling::*[not(self::source)][1]/preceding-sibling::*[self::source][preceding-sibling::current()]"/>
B B B  B B B  B B B  B B B  </xsl:otherwise>
B B B  B B B  B B B  </xsl:choose>
That is, test whether there are non-"foo" following siblings. If there 
are none, take all following siblings. If there are, go forward to the 
first non-"foo" sibling, and from there go backwards, taking all the 
"foo" siblings up to the current node.
But this does not work. Apparently, the expression 
"preceding-sibling::current()" is not a valid construct. So what is the 
correct way to do what I have in mind (or a simpler solution, if there 
is one). Please note that this stylesheet needs to be executed by a web 
browser, and so the solution has to remain within XPath 1.0.
Thanks in advance for your help!
Wolfhart