XPATH диапазон с использованием count
-
Есть страница с ужасно тупой разметкой
https://www.booksite.ru/vgv/magazine.php?y=1845Я через цикл хочу для каждого подзаголовка получить множество номеров.
Ну то есть для последнего можно применить следующий XPATHXPATH>(//*[@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]/../