Данная разметка выглядит следующим образом:
<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>
вместо своего контейнера.