Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XPath来定位具有特定文本解析HTML表的单元格_Xml_Xslt_Xpath_Groovy_Htmlunit - Fatal编程技术网

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

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

希望有人能很快为我指出正确的方向

当前,我已经确定了我在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')]") 
我认为上面的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>&nbsp;</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
元素。参考: