XPath - взять наибольшее число

Igorii

Client
Регистрация
21.02.2015
Сообщения
369
Благодарностей
292
Баллы
63
Подскажите, возможно ли в XPath взять наибольшее число?
Есть путь, который берёт первое число больше 100
//span[@class="dialog"][number(text())>100]
Можно сделать, что бы он брал не первое, а самое большое число на странице?
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 444
Благодарностей
1 287
Баллы
113
Подскажите, возможно ли в XPath взять наибольшее число?
Есть путь, который берёт первое число больше 100
//span[@class="dialog"][number(text())>100]
Можно сделать, что бы он брал не первое, а самое большое число на странице?
Можно ссылку на данный код страницы пожалуйста, или сам код страницы в блокноте? Я попробую сделать и скину вам ответ.
 

Igorii

Client
Регистрация
21.02.2015
Сообщения
369
Благодарностей
292
Баллы
63
Можно ссылку на данный код страницы пожалуйста, или сам код страницы в блокноте? Я попробую сделать и скину вам ответ.
Код не могу дать. Мне теория нужна, возможно ли это в XPath? Вроде есть функция max(), но что то не получается её пристроить
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 444
Благодарностей
1 287
Баллы
113
Код не могу дать. Мне теория нужна, возможно ли это в XPath? Вроде есть функция max(), но что то не получается её пристроить
Что бы показать вам теорию, я должен на себе протестировать, но если вы мастер, тогда вот теория:
C#:
ceiling(N): Возвращает самое маленькое целое число, которое не является меньше чем N.
round(N): Возвращает целое число, которое является самым близким к N.
floor(N): Возвращает самое большое целое число, которое не больше чем N.
Ставите вместо N число например 99999 и по идее, должно найти самое близкое к ней, либо вместо N пустота, например так floor().

В крайнем случае используйте команду:
C#:
last()
 
Последнее редактирование:

Igorii

Client
Регистрация
21.02.2015
Сообщения
369
Благодарностей
292
Баллы
63
Что бы показать вам теорию, я должен на себе протестировать, но если вы мастер, тогда вот теория:
C#:
ceiling(N): Возвращает самое маленькое целое число, которое не является меньше чем N.
round(N): Возвращает целое число, которое является самым близким к N.
floor(N): Возвращает самое большое целое число, которое не больше чем N.
Ставите вместо N число например 99999 и по идее, должно найти самое близкое к ней, либо вместо N пустота, например так floor().

В крайнем случае используйте команду:
C#:
last()
Спасибо, но данный функционал для округления чисел, а last(), вернёт последнее значение, а не наибольшее
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 444
Благодарностей
1 287
Баллы
113
Спасибо, но данный функционал для округления чисел, а last(), вернёт последнее значение, а не наибольшее
Если надумаете, скините в приват часть кода страницы, или в телеграм, посмотрю что можно придумать.
 
  • Спасибо
Реакции: Igorii

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 089
Благодарностей
126
Баллы
63
Пишите здесь, решение всем будет интересно.
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 805
Баллы
113
Код не могу дать. Мне теория нужна, возможно ли это в XPath? Вроде есть функция max(), но что то не получается её пристроить
max не работает потому что она из XPath 2.0, а Хром использует XPath первой версии.
Теория и ответ тут, но всё-равно придётся под себя самостоятельно допиливать решение.
 
  • Спасибо
Реакции: Igorii

Igorii

Client
Регистрация
21.02.2015
Сообщения
369
Благодарностей
292
Баллы
63
max не работает потому что она из XPath 2.0, а Хром использует XPath первой версии.
Теория и ответ тут, но всё-равно придётся под себя самостоятельно допиливать решение.
Спасибо! Я сделал следующим образом:

1. Кубиком Парсить данные, через свой XPath
//span[@class="dialog"][number(text())>100]
получил в список все числа.

2. Этим кодом, взял из списка самое большое число в переменную {-Variable.tmp-} и очистил список
C#:
int maxNum = project.Lists["List1"].Select(x => int.Parse(x)).Max();
project.Lists["List1"].Clear();
return maxNum;
3. Через стандартный кубик кликаю по самому большому числу, немного изменив XPath
//span[@class="dialog"][number(text())>={-Variable.tmp-}]

Вы не могли бы этот алгоритм упаковать в один снипет, когда нибудь он каждому пригодится.
У меня самого не получилось(
 

sitnem

Client
Регистрация
03.12.2016
Сообщения
122
Благодарностей
78
Баллы
28
Tab tab = instance.ActiveTab;
var arrEl = tab.FindElementsByXPath("//span[@class='dialog'][number(text())>100]");
int maxNum = arrEl.Select(x => int.Parse(x.InnerText)).Max();

tab.FindElementByXPath("//span[@class='dialog'][number(text())>="+ maxNum.ToString() +"]",0).Click();
 
  • Спасибо
Реакции: Se0mashines и Igorii

Igorii

Client
Регистрация
21.02.2015
Сообщения
369
Благодарностей
292
Баллы
63
Tab tab = instance.ActiveTab;
var arrEl = tab.FindElementsByXPath("//span[@class='dialog'][number(text())>100]");
int maxNum = arrEl.Select(x => int.Parse(x.InnerText)).Max();

tab.FindElementByXPath("//span[@class='dialog'][number(text())>="+ maxNum.ToString() +"]",0).Click();
Супер! Работает! Спасибо!
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)