лучше всего показано на упрощенном примере:
<?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>
Мне нужны все <B>
узлы, которые сразу , следующие за <A>
узлом с атрибутом name
равны "right"
.
Что я пробовал:
//A[@name="right"]/following-sibling::*[1]
, который выбирает любой узел, следующий сразу за "правым" <A>
(т.е. включая <C>
). Я не вижу, как сделать это только <B>
. Это не сработало:
//A[@name="right"]/following-sibling::*[1 and B]
Вот этот:
//A[@name="right"]/following-sibling::B[1]
выберет сначала <B>
после "правильного" <A>
, но не обязательно сразу после единица.