Какое выражение XQuery будет возвращать XPath каждого найденного узла? - PullRequest
1 голос
/ 04 февраля 2012

Я ищу пример XQuery, который возвращает xpath для каждого найденного узла.Так, например, вместо получения текста () каждого найденного узла я хотел бы получить путь () - но эта функция, кажется, не существует: -)

Теперь я вижу, что спецификация XPath 3.0определяет функцию path (), которая будет делать то, что я хочу, но, видимо, это плохо для 3.0

http://www.w3.org/TR/2011/WD-xpath-functions-30-20111213/#func-path

1 Ответ

3 голосов
/ 04 февраля 2012

Как прокомментировал Мартин Хоннен, выражение 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].

...