XPath匹配表中的文本 - Ruby - Nokogiri

时间:2012-02-08 21:57:38

标签: xpath

我有一张看起来像这样的表

<table cellpadding="1" cellspacing="0" width="100%" border="0">
  <tr>
      <td colspan="9" class="csoGreen"><b class="white">Bill Statement Detail</b></td>
  </tr>
  <tr style="background-color: #D8E4F6;vertical-align: top;">
      <td nowrap="nowrap"><b>Bill Date</b></td>
      <td nowrap="nowrap"><b>Bill Amount</b></td>

      <td nowrap="nowrap"><b>Bill Due Date</b></td>
      <td nowrap="nowrap"><b>Bill (PDF)</b></td>
  </tr>
</table>

我正在尝试创建XPATH以查找此表,其中包含测试Bill Statement Detail。我想要整个表而不仅仅是td。

这是我到目前为止所尝试的内容:

page.parser.xpath( '//表[含有(文本(), “比尔”)]')

page.parser.xpath('// table / tbody / tr [contains(text(),“Bill Statement Detail”)]')

感谢任何帮助

谢谢!

3 个答案:

答案 0 :(得分:1)

您的第一个XPath示例是您选择table时最接近的示例。第二个示例,如果它匹配,将选择tr - 这个将不起作用主要是因为,根据您的示例,您想要的文本位于b节点,而不是{{1} } node。

由于tr,此解决方案尽可能模糊。如果目标文字始终位于*下,请将其更改为b

descendant::b

这是具体的,举个例子,我可以做:

//table[contains(descendant::*, 'Bill Statement Detail')]

答案 1 :(得分:0)

你可能想要

// table [contains(descendant :: text(),“Bill Statement Detail”)]

答案 2 :(得分:0)

如果匹配字不在第一行,建议的代码不能正常工作。请参阅相关帖子Find a table containing specific text