Получить предикаты позиции XPath от узлов

Есть ли способ получить позиционные предикаты XPath из определенного экземпляра узла. Итак, я ищу функцию position(Node), которая возвращает позицию узла в дереве dom. Пример:

<page>
  <line>
    <wd> bla </wd>
    <wd> blabla </wd>
  </line>
  <line>
    <wd> lorem </wd>
    <wd> ipsum </wd>
    <wd> dolor </wd>
    <wd> sit </wd>
  </line>
</page>

Таким образом, функция, примененная к узлу с содержимым «ipsum», должна возвращать что-то вроде: второе слово, вторая строка, первая страница.

ваше здоровье


person maggu    schedule 11.08.2013    source источник


Ответы (1)


Вы можете получить положение узла, используя ось preceding-sibling. Например, если элемент wd, содержащий строку 'ipsum', находится в переменной $ipsum, вы можете определить позицию в его родительском элементе с помощью:

count($ipsum/preceding-sibling::*) + 1

И позиция родителя $ipsum с:

count($ipsum/../preceding-sibling::*) + 1
person nwellnhof    schedule 11.08.2013
comment
Спасибо за ваш ответ, но я не понимаю. Строка не может быть уникальной?! Так что я бы получил несколько позиций. Как я могу получить доступ к информации об объекте узла? Также я не могу реализовать остальную часть вашего примера :( в каком контексте я должен использовать функцию подсчета? ... еще раз спасибо - person maggu; 11.08.2013
comment
Вы используете одно выражение XPath для получения узла, после чего вы будете использовать этот узел для запроса его положения с последующими выражениями XPath. Возможно заменить $ipsum контекстом .. Сильно зависит от того, какой язык программирования вы используете. - person Jens Erat; 11.08.2013
comment
Благодарю вас! Я использую Java вместе с org.w3c.dom и до сих пор не понимаю, как это сделать :( С объектом есть функция подсчета? - person maggu; 12.08.2013