希望有人能在我的XPath困难中快速指出正确的方向。
当前我已经到了我在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中的某个地方包含文本'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> </td>
</tr>
非常感谢任何帮助/指示。
谢谢,
答案 0 :(得分:16)
使用此XPath:
//td[contains(., 'Chapter')]
答案 1 :(得分:7)
您希望当前节点下的所有td
- - 全部在文档 中,因为当前接受的答案选择
使用强>:
.//td[.//text()[contains(., 'Chapter')]]
这将选择当前节点的所有td
个后代,这些后代名为td
,至少有一个文本节点后代,其字符串值包含字符串"Chapter"
。
如果事先知道此td
下的任何table
只有一个文字节点,则可以简化为:
.//td[contains(., 'Chapter')]
答案 2 :(得分:2)
你在正确的“道路上”。
contains()函数限制特定元素,而不限于任何子元素中的文本。试试这个XPath,您可以阅读如下:
- 使用包含文本“Chapter”
tr/td[contains(*,"Chapter")]
祝你好运