Как прокомментировал Мартин Хоннен, выражение XPath, выбирающее конкретный узел, не уникально. Например, второй элемент y
в следующем документе
<x>
<y id="1"/>
<y id="2"/>
</x>
может быть выбрано (не исключительно) с помощью:
//y[2],
/x/y[2],
//*[@id = '2'],
/x/*[position() = last()]
Если вы просто заинтересованы в получении некоторого выражения XPath для выбора узла, Библиотека функций FunctX XQuery содержит две функции, которые делают это:
functx: путь к узлу
возвращает выражение XPath, которое выбирает все узлы с одинаковыми именами и
имена предков в качестве узла, для которого вы оцениваете его.
В нашем примере будет возвращено x/y
для обоих y
элементов (обратите внимание на отсутствующую косую черту).
functx: path-to-node-with-pos также включает в себя положение каждого предка в документе, тем самым выбирая только передаваемый вами узел.
В этом примере первый элемент y
будет выдавать x/y[1]
, а второй x/y[2]
.