Ответ @rsp правильный, но я бы хотел добавить объяснение. Не всегда верно, что [cond1 and cond2]
эквивалентно [cond1][cond2]
. Вам нужна вторая форма.
Ваше выражение:
/root/el[position() <= 2 and @value=4]
... выбирает все элементы el
, которые имеют атрибут value
, равный 4
, и положение которого меньше или равно 2
. В вашем документе нет таких элементов.
Вы хотите:
/root/el[@value=4][position() <= 2]
... который сначала выбирает все элементы el
с атрибутом value
, равным 4
, а затем фильтрует этот список по позиции, как требуется.