Обновлено, чтобы отразить решение, предназначенное OP.
См. Ответ Дэвида
Для образца xml ниже,
<root>
<foo id="0">
<bar attr="val"/>
<foo id="1">
<bar attr="xxx"/>
</foo>
<foo id="2">
<bar attr="val">
<one>1</one>
<two>
<three>3</three>
</two>
</bar>
</foo>
</foo>
допустимый xpath на обратной оси с в качестве узла контекста, допустимое решение -
./ancestor::foo[bar[@attr='val']][position() = 1]
"./" необязательно. position () = 1 не является обязательной, так как в противном случае также будет возвращен предок foo
, удовлетворяющий предикатам.
Старый ответ: игнорировать
Это старый вопрос. но всем, кто заинтересован, следующее должно дать вам то, что предполагалось в первоначальном вопросе.
Обратная ось
//bar[@attr='val']/ancestor::*[position()=1]
Передняя ось
//*[child::bar[@attr='val']]