Соответствие текста с xpath? - PullRequest
1 голос
/ 13 августа 2011

Я просматриваю страницу HTML, которая содержит:

<table border=1 class="searchresult" cellpadding=2> 
<tr><th colspan=2>Last search</th></tr> 
<tr><th align=left>Search term</th><td>xxxxxx</td></tr> 
<tr><th align=left>Result</th><td>yyyyyyyy/td></tr> 
</table>

Я хочу написать выражение XPATH, которое возвращает мне ячейку данных, содержащую «гггггггг». Я дошел до

.//table[@class='searchresult']//tr/th

, который возвращает мне список всех узлов заголовка таблицы в таблице. Я могу перебрать их в коде пользователя, найти тот, чей .text равен «Results», и затем вызвать .getnext (), чтобы получить данные таблицы. Но есть ли более чистый способ сделать это, написав более конкретный шаблон XPATH? Кажется, что так и должно быть, но я еще не дошел до XPATH, чтобы понять, как это сделать.

Если это имеет значение, я делаю это на Python с помощью lxml.

Ответы [ 2 ]

1 голос
/ 13 августа 2011

. // table [@ class = 'searchresult'] // tr / td [previous-sibling :: th] может дать вам то, что вам нужно.

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

http://tobiasanton.com/Tobias_Anton/Academia.html

0 голосов
/ 13 августа 2011

Используйте

//table/tr[last()]/td

Выбирает любой элемент td, который является дочерним по отношению к любому tr, который является последним tr дочерним по отношению к любому table в этом документе XHTML.

Это может выбрать более одного элемента td, в зависимости от того, есть ли в документе XHTML только один table. Вам нужно сделать это выражение более точным, если присутствует более одного table элемента .

Например, если рассматриваемый table является первым в документе, используйте :

(//table)[1]/tr[last()]/td
...