Как получить это значение только с одним xpath? - PullRequest
0 голосов
/ 21 июня 2020

Я хочу иметь XPATH, который может выбирать дату и время (например, 19 июня 2020 года в 20:59) во всех случаях:

<span class="post_date"><span title="June 21, 2020 at 08:18 AM" currentmouseover="12">1 hour ago</span> <span class="post_edit" id="edited_by_2462600"> </span></span>

<span class="post_date" currentmouseover="62">June 19, 2020 at 08:56 PM <span class="post_edit" id="edited_by_2454907"> </span></span>

<span class="post_date" currentmouseover="157"><span title="June 20, 2020" currentmouseover="168">Yesterday</span> at 10:41 AM <span class="post_edit" id="edited_by_2457722"> </span></span>

Я могу легко получить второй с //*[@class="post_date"]/text(), но есть ли способ получить 2 других и иметь 1 xpath для всех случаев? Или мне лучше написать для этого функцию?

Спасибо

1 Ответ

0 голосов
/ 21 июня 2020

Рабочее выражение XPath для выбора всех дат одним выражением:

(//@title|//text())[contains(.,", ") or contains(.," at ")]

Вывод: 4 узла

Узлы

РЕДАКТИРОВАТЬ: если вам нужно что-то посильнее (при условии, что все сообщения были отправлены после 2000 года).

//span[@class='post_date']/span[contains(@title,', 20')]/@title|//span/text()[contains(.,' at ') and contains (.,':')][ancestor::*[1][self::span][@class='post_date']]

Или:

(//span[@class='post_date']/span[@title]/@title|//span/text()[ancestor::*[1][self::span][@class='post_date']])[contains(.,', 20') or contains(.,' at ')]

Результат: 4 узлы

...