XPath для поиска ячейки с определенным текстом, анализирующим таблицы HTML

надеюсь, кто-то там может быстро указать мне в правильном направлении с моими трудностями XPath.

Current я дошел до точки, где я определяю правильную таблицу, которая мне нужна в моем HTML-источнике, но затем мне нужно обработать только строки, которые имеют текст "Глава" где-то в DOM.

моей последней попыткой было сделать это:

// get the correct table
HtmlTable table = page.getFirstByXPath("//table[2]");

// now the failing bit....
def rows = table.getByXPath("*/td[contains(text(),'Chapter')]") 

Я думал, что xpath выше будет представлять, получить мне все элементы, которые имеют следующий дочерний элемент "td" что где-то в его dom содержится текст "Глава"

пример совпадающей строки из моего источника:

<tr valign="top">
  <td nowrap="" align="Right">
   <font face="Verdana">
   <a href="index.cfm?a=1">Chapter 1</a>
   </font>
  </td>
  <td class="ChapterT">
    <font face="Verdana">DEFINITIONS</font>
  </td>
  <td>&nbsp;</td>
</tr>

любая помощь / указатели высоко ценится.

спасибо,

3 ответов


используйте этот XPath:

//td[contains(., 'Chapter')]

вы хотите, чтобы все tds под вашим текущим узлом -- not - все в документе в качестве принятого ответа выбирает.

использовать:

.//td[.//text()[contains(., 'Chapter')]]

это выбирает все td потомки текущего узла с именем td которые имеют хотя бы один потомок текстового узла, строковое значение которого содержит строку "Chapter".

если заранее известно, что любая td при этом table имеет только один текстовый узел, это можно упростить до просто:

.//td[contains(., 'Chapter')]

ваш на правильном "пути".
Функция contains () ограничена определенным элементом, а не текстом в любом из дочерних элементов. Попробуйте этот XPath, который вы можете прочитать следующим образом: - получить каждый tr / td с любым подэлементом, который содержит текст "Глава"

tr/td[contains(*,"Chapter")]

удачи