Я запутался в том, что должно быть чем-то простым, и предыдущие вопросы (и документация) на самом деле не помогают.
Скажем, у нас есть эти 6 братьев и сестер:
<a_tag>... a1 ...</a_tag>
<b_tag>... b1 ...</b_tag>
<a_tag>... a2 ...</a_tag>
<b_tag>... b2 ...</b_tag>
<a_tag>... a3 ...</a_tag>
<b_tag>... b3 ...</b_tag>
Некоторые выражения xpath работают так, как я ожидал. Например, //a_tag
выбирает все 3 a_tags
; //a_tag[2]
выбирает только a2
.
С помощью //a_tag[following-sibling::b_tag]
снова выбираются все 3 a_tags
.
Становясь немного любопытнее, //a_tag[following-sibling::b_tag[2]]
правильно выбирает a1
и a2
. Однако, используя //a_tag[following-sibling::b_tag[3]]
, выбирается только a1
, в то время как я ожидал, что он выберет все 3 a_tags
(потому что за ними следуют b_tag[3]
.
А затем //a_tag[preceding-sibling::b_tag[1]][following-sibling::b_tag[2]]
выбирает a2
, как и ожидалось, но //a_tag[preceding-sibling::b_tag[2]][following-sibling::b_tag[3]]
, который я ожидал выбрать a3
, выходит пустым.
Если вы добавите в него что-то, что я бы ничего не выбрал, например //a_tag[preceding-sibling::b_tag[2]][following-sibling::b_tag[1]]
, вместо этого выберите a3
.
Есть еще такие, но я считаю, что проблема достаточно ясна. Любой свет, брошенный на это, был бы оценен.