查找包含特定文本的表

时间:2014-06-19 07:59:52

标签: ruby xpath nokogiri

我有一张桌子:

 html ='
 <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 matching text in a table - Ruby - Nokigiri)。如果我使用第一行中的任何单词作为匹配词,它可以正常工作,例如“Statement”。但是如果我使用另一行中的单词,例如“Amount”,它就不起作用。

doc  = Nokogiri::HTML("#{html}")
doc.xpath('//table[contains(descendant::*, "Statement")]').each do |node|
    puts node.text
end

1 个答案:

答案 0 :(得分:2)

contains()函数需要一个奇异值作为其第一个参数。 descendant::*可能会产生多个元素,然后导致函数意外运行,例如只考虑第一个元素。

尝试将您的XPath更改为:

doc.xpath('//table[descendant::*[contains(., "Amount")]]').each do |node|
    puts node.text
end