我有一个表的NodeSet,看起来像这样:
<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>
<td><b>Bill Date</b></td>
<td"><b>Bill Amount</b></td>
<td"><b>Bill Due Date</b></td>
<td"><b>Bill (PDF)</b></td>
</tr>
<tr vAlign="top">
<td>blahA</td>
<td>blahB</td>
<td>blahC</td>
<td><a href="javascript: void(0);" onclick="javascript:window.open('/cso/displaypdfbill?selectedBillkey=447403730','_blank');">View Bill</a></td>
</tr>
现在,我计划循环浏览表中的每个onclick。
我一直试图在NodeSet中循环,但没有成功。
我最终尝试了很多次都失败了,但我想它最终会看起来像这样:
doc_list.each_element ("//a[td/text()='onclick']/@href") do | |
#here I want to scan and save BlahA into a Variable
end
您想用onclick遍历所有内容吗?也许:
doc.css('*[onclick]').each do |el|
puts el[:onclick]
end
编辑:您可能真正想要的是从第3行开始的每一行的第一个td。在这种情况下:
table.css('td[1]')[2..-1].each do |td|
puts td.text
end
有效地做到这一点的关键不在于你的问题,而在于你的评论"我想提取tr中有onclick的第一个td"。
这个表达式正是这样做的:
doc.xpath('//tr[td/a/@onclick]/td[1]/text()')
事实上,这将为您提供所有这样的匹配集。不需要迭代。