XPath to locate a cell with specific text parsing HTML tables

David Brown picture David Brown · Mar 10, 2012 · Viewed 21.9k times · Source

Hope someone out there can quickly point me in the right direction with my XPath difficulties.

Current I've got to the point where I'm identifying the correct table i need in my HTML source but then I need to process only the rows that have the text 'Chapter' somewhere in the DOM.

My last attempt was to do this :

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

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

I thought the xpath above would represent, get me all elements that have a following child element of 'td' that somewhere in its dom contains the text 'Chapter'

An example of a matching row from my source is :

<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>

Any help / pointers greatly appreciated.

Thanks,

Answer

Kirill Polishchuk picture Kirill Polishchuk · Mar 10, 2012

Use this XPath:

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