XPATH: select nodes of given name which are immediately following some specific nodes

Viewed 23834

best shown by a simplified example:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <A name="wrong"></A>
    <B>not this</B>
    <A name="right">
      <subA></subA>
    </A>
    <B>yes, this</B>  <!-- I want only this one -->
    <A name="right">
      <subA></subA>
    </A>
    <C>dont want this</C>
    <B>not this either</B>  <!-- not immediately following -->
</root>

I want all <B> nodes that are immediately following an <A> node with name attribute equals "right".

What I tried:

//A[@name="right"]/following-sibling::*[1]

which selects any node immediately following the "right" <A> (i.e. including <C>). I don't see how to make it only <B>. This didn't work:

//A[@name="right"]/following-sibling::*[1 and B]

This one:

//A[@name="right"]/following-sibling::B[1]

would select the first <B> after the "right" <A>, but not necessarily the immediately following one.

3 Answers
Related