我如何在html响应的nokogiri中获取此结构的tr

时间:2012-08-01 10:38:48

标签: ruby-on-rails ruby ruby-on-rails-3 nokogiri

如何在html响应中的nokogiri中获取这个结构的代码中提到的tr

<html>
  <body>
    <table>

    </table>

  <table>
    <tbody>
      <tr>
        <td>
          <table>
            <tr></tr>
              <tr><td> wanna this text as output.</td></tr>
          </table>
         </td>
      </tr>
    </tbody>
   </table>
  </body>
</html>

2 个答案:

答案 0 :(得分:0)

有多种方法可以访问该文本,例如:

html = Nokogiri::HTML my_html_string
row_text = html.at('//table[2]/tbody/tr/td/table/tr[2]').text

答案 1 :(得分:0)

我更喜欢使用CSS访问器,因为他们更宽容。使用您的HTML示例,我会使用:

irb(main):026:0> doc.search('table table tr').last.text
" wanna this text as output."

或者,XPATH访问器是:

irb(main):042:0> doc.search('//table//table//tr').last.text
" wanna this text as output."

您正在寻找包含多行的嵌套表。你想要最后一行。

每当您在浏览器中查看HTML并看到<table><tbody>组合时,请小心谨慎。浏览器会进行大量的代码修复,当您直接检索HTML并将其传递给解析器时,可能会导致标签不存在。而且,您在浏览器输出中看到的那些不存在的标记会在您添加它们时放弃您的CSS或XPath访问权限。特别是<tbody>是一个真正常见的问题。