Использование Xpath для выделения текста с несколькими пустыми родственными тегами - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь написать xpath, который будет захватывать значения внутреннего текста следующих тегов, в идеале я хотел бы использовать оператор OR, чтобы я мог выбрать один xpath для выделения текста: Pay или Оплачено в обоих случаях.

кейс 1

<td>
<a class="btn btn-success">Pay</a>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
</td>

кейс 2

<td>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
Paid
<div class="display:none"></div>
</td>

Подход, который я сейчас пытаюсь использовать, заключается в том, чтобы сначала попытаться и просто заставить xpath игнорировать все <div class="display:none"></div>, потому что xpath //td/text() просто заканчивает сбором всех пустых тегов div.

Я опробовал эти подходы, чтобы избежать пустых тегов:

//td::child[@text='Pay' OR @text='Paid']
//td/text()
//td::child[not(@class="display:none")]

Эти xpath-ы в конечном итоге привыкают к извлечению данных с помощью cheerio.js. Другой подход, который я еще не изучал, - это попытаться перебрать результаты из //td/text()

Кто-нибудь сталкивался с такой проблемой раньше?

1 Ответ

1 голос
/ 13 марта 2019

Получить все текстовые узлы, которые имеют какой-либо контент после нормализованного пространства:

//text()[boolean(string-length(normalize-space(.)))]

upd: мое решение слишком затянуто.Смотрите комментарий @ Alejandro

...