XPath用于定位具有解析HTML表的特定文本的单元格

Dav*_*own 9 xml groovy xpath htmlunit

希望有人可以迅速指出我的XPath困难正确的方向.

目前我已经到了我在HTML源代码中识别我需要的正确表格的那一点,但后来我只需要处理在DOM中某处有文本"Chapter"的行.

我的最后一次尝试是这样做:

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

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

我认为上面的xpath代表,让我所有具有后续子元素'td'的元素在其dom中的某个地方包含文本'Chapter'

我的源代码中匹配行的示例如下:

<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>
Run Code Online (Sandbox Code Playgroud)

任何帮助/指针非常感谢.

谢谢,

Kir*_*huk 17

使用此XPath:

//td[contains(., 'Chapter')]
Run Code Online (Sandbox Code Playgroud)


Dim*_*hev 7

您希望td当前节点下的所有节点 - 而不是 - 当前接受的答案选择的文档 中的所有节点.

用途:

.//td[.//text()[contains(., 'Chapter')]]
Run Code Online (Sandbox Code Playgroud)

这将选择td当前节点的所有后代,这些后代td具有至少一个文本节点后代,其字符串值包含该字符串"Chapter".

如果事先知道任何td下面table只有一个文本节点,这可以简化为:

.//td[contains(., 'Chapter')]
Run Code Online (Sandbox Code Playgroud)