Xml XPath来定位具有特定文本解析HTML表的单元格
希望有人能很快为我指出正确的方向 当前,我已经确定了我在HTML源代码中需要的正确表,但是我只需要处理DOM中某个地方有文本“Chapter”的行 我最后一次尝试是这样做:Xml XPath来定位具有特定文本解析HTML表的单元格,xml,xslt,xpath,groovy,htmlunit,Xml,Xslt,Xpath,Groovy,Htmlunit,希望有人能很快为我指出正确的方向 当前,我已经确定了我在HTML源代码中需要的正确表,但是我只需要处理DOM中某个地方有文本“Chapter”的行 我最后一次尝试是这样做: // get the correct table HtmlTable table = page.getFirstByXPath("//table[2]"); // now the failing bit.... def rows = table.getByXPath("*/td[contains(text(),'Chapt
// 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/td[contains(*,"Chapter")]
my source中匹配行的一个示例是:
<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>
定义
非常感谢您的帮助/指点
谢谢,您的“道路”是正确的。contains()函数仅限于特定元素,而不是任何子元素中的文本。尝试此XPath,您可以阅读如下内容: -获取每个tr/td以及包含“章节”文本的任何子元素
tr/td[contains(*,"Chapter")]
祝你好运使用这个XPath:
//td[contains(., 'Chapter')]
您需要当前节点下的所有
td
s,而不是-文档中的所有,因为当前接受的答案选择了
使用:
.//td[.//text()[contains(., 'Chapter')]]
.//td[contains(., 'Chapter')]
这将选择当前节点名为td
的所有td
子体,这些子体至少有一个文本节点子体,其字符串值包含字符串“Chapter”
如果事先知道此表
下的任何td
只有一个文本节点,则可将其简化为仅:
.//td[.//text()[contains(., 'Chapter')]]
.//td[contains(., 'Chapter')]
嗨,威廉,试了一下,但没能让它归还任何东西。有效的方法是使用一行“def chapterAnchors=page.anchors.findAll{HtmlAnchor a->a.asText().contains('Chapter')”}谢谢,这似乎很有效。“.”代表什么?此外,我也不明白为什么“相关”检测不起作用,例如,你有//我理解它的意思是从根开始?@Dave,不客气
和/
是XPath的缩写语法<代码>选择上下文节点//td
选择文档根的所有td
子体,从而选择与上下文节点相同文档中的所有td
元素。参考: