Данная разметка выглядит следующим образом:
<div class="foo">
<div><span class="a1"></span><a href="...">...</a></div>
<div><span class="a2"></span><a href="...">...</a></div>
<div><span class="a1"></span>some text</div>
<div><span class="a3"></span>some text</div>
</div>
Теперь мне интересно получить эти <a> и some text ТОЛЬКО, если соседний span имеет класс a1. Поэтому в конце всего кода мой результат <a> из первых div и some text из третьего. Было бы легко, если бы <a> и some text находились внутри span или div имели бы атрибут class, но не повезло.
Теперь я делаю запрос для span с классом a1 следующим образом:
//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]
а затем получить его родительский элемент и сделать еще один query() с этим родителем node в качестве контекста node. Это выглядит далеко не эффективным, так есть ли лучший способ сделать это?
ОТВЕТ
В соответствии с @MarcB answer правильный запрос:
//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/..
но для <a> может быть лучше использовать:
//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/../a
получить <a> вместо своего контейнера.