Найдите положение узла в наборе узлов с помощью xpath

После проигрывания вокруг с position() напрасно я гуглил вокруг для решения и прибыл в этот более старый stackoverflow вопрос, который почти описывает мою проблему.

Различие - то, что набор узлов, в котором я хочу положение, является динамичным, а не непрерывный раздел документа.

Для иллюстрирования я изменю пример от связанного вопроса соответствовать моим требованиям. Обратите внимание что каждый элемент в другом элемент. Это - критический бит.


    
        zyx
    
    
        wvu
    
    
        tsr
    
    
        qpo
    

Теперь, если я запросил, с помощью XPath для a/b Я получил бы набор узлов четырех узлы. Я хочу затем найти положение в том наборе узлов узла, который содержит строку 'tsr'. Решение в другом сообщении повреждается здесь: count(a/b[.='tsr']/preceding-sibling::*)+1 возвраты 1 потому что preceding-sibling перемещается по документу, а не набору узлов контекста.

Действительно ли возможно работать в наборе узлов контекста?

5
задан Community 23 May 2017 в 12:22
поделиться

2 ответа

Как насчет этого ..

count(a/b[.='tsr']/preceding-sibling::b) + count(a[b[.='tsr']]/preceding-sibling::a/b) + 1

Подсчитайте предыдущих братьев и сестер элемента b в текущем элементе a, а затем подсчитайте элементы b всех предыдущих братьев и сестер элемента a. Или что-то подобное.

-1
ответ дан 14 December 2019 в 13:31
поделиться

Причина, по которой вы получаете 1, не связана с контекстом против документа. документа, а потому, что вы считаете только b узлы внутри одного a узла (поэтому вы всегда получите 0, потому что никогда нет никаких предшествующих 'b' узлов.

Скорее вам нужно найти количество предшествующих узлов 'a' перед узлом 'b', который содержит ваш 'a'.

Something like:

count(a[b[.='tsr']]/preceding-sibling::a)
0
ответ дан 14 December 2019 в 13:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: