【问题标题】:XPATH - Ruby - Nokogiri - NodesetXPATH - Ruby - Nokogiri - 节点集
【发布时间】:2012-02-08 22:53:46
【问题描述】:

我有一个类似于此的表的 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

【问题讨论】:

  • 您到底想从 HTML 中提取什么?
  • 我要提取数据 blahA

标签: ruby xpath nokogiri


【解决方案1】:

您想通过点击遍历所有内容吗?也许:

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_list.css('[onclick]').each do |el| puts doc_list.xpath("//tr/td[contains(text(), 'onclick')]").text end
  • 在这种情况下:el.parent.parent.at('td').text
【解决方案2】:

有效地做到这一点的关键不在于您的问题,而在于您的评论“我想提取 tr 中存在 onclick 的第一个 td”。

这个表达式正是这样做的:

doc.xpath('//tr[td/a/@onclick]/td[1]/text()')

事实上,这会给你所有这样的匹配。无需迭代。

【讨论】:

    猜你喜欢
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多