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> </td>
</tr>
любая помощь / указатели высоко ценится.
спасибо,
3 ответов
вы хотите, чтобы все td
s под вашим текущим узлом -- not - все в документе в качестве принятого ответа выбирает.
использовать:
.//td[.//text()[contains(., 'Chapter')]]
это выбирает все td
потомки текущего узла с именем td
которые имеют хотя бы один потомок текстового узла, строковое значение которого содержит строку "Chapter"
.
если заранее известно, что любая td
при этом table
имеет только один текстовый узел, это можно упростить до просто:
.//td[contains(., 'Chapter')]
ваш на правильном "пути".
Функция contains () ограничена определенным элементом, а не текстом в любом из дочерних элементов. Попробуйте этот XPath, который вы можете прочитать следующим образом:
- получить каждый tr / td с любым подэлементом, который содержит текст "Глава"
tr/td[contains(*,"Chapter")]
удачи