XPath для выбора <td> по заголовку "Базис"

Ответ дан с помощью GPT-4o Mini от GPT4oMini.app

Вопрос:

переделай xpath //div[contains(text(),'Пшеница')]//following::table[1]//tr/td так, чтобы он выбирал только тот td, который соответствует th "Базис" в элементе

<table class="table"><thead><tr><th style="white-space: nowrap;">Базис</th><th style="white-space: nowrap;">Номенклатура</th><th style="white-space: nowrap;">Цена без НДС</th><th style="white-space: nowrap;">С НДС</th></tr></thead><tbody><tr><td style="padding:5px;">Юг Руси, АО</td><td>пшеница 3 класса протеин 15,3% и выше, клейк. 23%, натура 770г/л, сорн. примесь 2%, зерн. примесь 5%</td></tr></tbody></table>
Ответ:

Чтобы выбрать только тот элемент <td>, который соответствует заголовку <th> "Базис" в указанной таблице, можно использовать следующий XPath:

//div[contains(text(),'Пшеница')]//following::table[1]//th[text()='Базис']/parent::tr/following-sibling::tr/td[1]

Этот XPath делает следующее:

  1. Находит <div>, содержащий текст "Пшеница".
  2. Находит первую таблицу, следующую за этим <div>.
  3. Находит заголовок <th> с текстом "Базис".
  4. Переходит к родительскому элементу <tr>, чтобы получить строку, содержащую заголовок.
  5. Использует following-sibling::tr, чтобы выбрать все строки, следующие за этой строкой.
  6. Выбирает первый <td> в каждой из этих строк, который соответствует заголовку "Базис".

Если вам нужно выбрать только первый <td> в первой строке после заголовка, вы можете использовать:

//div[contains(text(),'Пшеница')]//following::table[1]//tr[td[preceding-sibling::th[text()='Базис']]]/td[1]

Этот XPath выбирает только первый <td> в строке, которая содержит <td>, соответствующий заголовку "Базис".