XPATH диапазон с использованием count



  • Есть страница с ужасно тупой разметкой
    https://www.booksite.ru/vgv/magazine.php?y=1845

    Я через цикл хочу для каждого подзаголовка получить множество номеров.
    Ну то есть для последнего можно применить следующий XPATH

    XPATH>(//*[@class='PartHeader'])[4]/../following-sibling::tr/td/a

    А вот промежуточные надо высчитывать. Применяю count

    XPATH>(//[@class='PartHeader'])[3]/../following-sibling::tr[position()<=count((//[@class='PartHeader'])[3]/../following-sibling::tr) - count((//*[@class='PartHeader'])[4]/../following-sibling::tr)]/td/a

    То есть по идее должны быть выбраны tr в количестве tr после 3 совпадения - количество tr после 4 совпадения. Но в итоге выбирается совершенно не то.

    Что я делаю не так?



  • Может Цикл Forearch вам в помощь и в связке с Проверкой Текста и и Содержит и и тп и тд.
    Можно Разгуляться Фантазии то :)))
    Главное за что то схватиться же, а там вот уж Фантазии и Глобальства своего хватит :)

    Кстати, а что там в то Время Писали, я как понял Архив же издания Вольской губернии.
    И ещё 800 сотых годов, даж ИНтересно стало, что там писали в то время, пойду гляну :)
    Читать Люблю, хлебом не корми :)))



  • @super84 said in XPATH диапазон с использованием count:

    Может Цикл Forearch вам в помощь и в связке с Проверкой Текста и и Содержит и и тп и тд.
    Можно Разгуляться Фантазии то :)))
    Главное за что то схватиться же, а там вот уж Фантазии и Глобальства своего хватит :)

    Да я вроде схватился, только чего-то не работает. С более простыми конструкциями - работает отлично. А тут ощущение что из-за двойных скобок в count что-то идёт не так.



  • Короче как всегда оказалось, что в какой-нибудь версии БАС что-нибудь работает некорректно. В данном случае оказалось что в 23.2 верный XPATH просто не работал.

    XPATH>(//[@class='PartHeader'])[3]/../following-sibling::tr[position()<= count((//[@class='PartHeader'])[3]/../following-sibling::tr) - count((//*[@class='PartHeader'])[4]/../following-sibling::tr)]/td/a

    А вот в 24 с ним всё норм

    Если вдруг кто столкнется с необходимостью поиска элементов между двумя другими можете пользоваться этой схемой.

    В примере мы выделяем tr следующие за [@class='PartHeader'])[3]/../ в количестве tr следующих за [@class='PartHeader'])[3]/../ МИНУС количество tr следующие за [@class='PartHeader'])[4]/../


Log in to reply
 

  • 2
  • 6
  • 2
  • 2
  • 3
  • 4
  • 3
  • 5