Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Проблема с постоением правильного xpath


(olegS) #1

Проблема следующая: пытаюсь по хpath получить нужный текст

    <p style="text-align: center; ">
<strong>Opening hours: </strong>
<br/>
Monday - Thursday 9.00 - 17.00
<br/>
Friday 9.00-16.00
</p>

строю следующий хpath: //*[@id=‘node-1031’]//p[1]
в итоге получаю три строки:

Opening hours:
Monday - Thursday 9.00 - 17.00
Friday 9.00-16.00

задача получить отдельно вторую строку


(Александр Таранков) #2

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


(Dmytro Makhno) #3

http://www.freeformatter.com/xpath-tester.html#ad-output

Ваш xml
Гугл подсказал такое:
xpath = //p[1]/text()[preceding-sibling::br and following-sibling::br]
result = Monday - Thursday 9.00 - 17.00

P.S. Но лучше попросите девов, сделать что-то более удобоиспользуемое.


(vmaximv) #4

//p/text()[3] - это правильно с точки зрения xpath, от тока в селениуме такая конструкция работать не будет, т.к. результатом выполнения xpath должна быть нода, а не текст.


(svim) #5

Напишите регулярное выражение для выборки конкретного элемента

reg = reg.replaceAll("<.*?>", "").replaceAll("(?m)^[ \\t]*\\r?\\n", "");
String[] result = reg.split("\n");

Где:
result[0] = “Opening hours:”;
result[1] = “Monday - Thursday 9.00 - 17.00”;
result[2] = “Friday 9.00-16.00”;

В вашем случае System.out.print(result[1]);

Monday - Thursday 9.00 - 17.00

(Funker) #7

Очень круто и сильно!!! Видно что человек знает xpath
но боюсь что некоторые браузеры не смогут отработать такой крутой Xpath


(Funker) #8

Я бы поступил проще, брал бы весь текс и парсил используя java substring
может прямолинейно но всегда понятно как оно работает :slight_smile: