Hpricot: match inner_text then return parent

Hello,

Here is sample HTML:

abcd efgh ijkl
mnop qrst uvwx

I have a requirement that I need to match for example the inner_text
“qrst”. If I find it, then I want to grab the immediate parent. So for
example, I want qrst, if a a.inner_text == qrst then grab parent and the
result I want is:

mnop qrst uvwx

My very wrong attempt:

  (doc/"html//body//form//table//tbody//tr//td").each do |row|

      result = row.search("a").select {|ele|
        if ele.inner_text.to_s == mac_addr
          puts "I'm in"
          parent = ele.nodes_at(-1)
          puts parent
        end
      }


  end

I can’t seem to grab just one selection let alone grab the parent :frowning:

Thank you

Thanks for Ryan52 on IRC. It ended up being simpler than I thought:

For input file:

abcd efgh ijkl
mnop qrst uvwx

The following with parse and then find the element and then return the
parent:

require ‘rubygems’
require ‘hpricot’

  doc = open("test.html") { |f| Hpricot(f)}

  result = 

(doc/“tr”).search(“a[text()*=‘uvwx’]”).first.parent.parent
puts result

ga rg wrote:

Hello,

Here is sample HTML:

abcd efgh ijkl
mnop qrst uvwx

I have a requirement that I need to match for example the inner_text
“qrst”. If I find it, then I want to grab the immediate parent. So for
example, I want qrst, if a a.inner_text == qrst then grab parent and the
result I want is:

mnop qrst uvwx

My very wrong attempt:

  (doc/"html//body//form//table//tbody//tr//td").each do |row|

      result = row.search("a").select {|ele|
        if ele.inner_text.to_s == mac_addr
          puts "I'm in"
          parent = ele.nodes_at(-1)
          puts parent
        end
      }


  end

I can’t seem to grab just one selection let alone grab the parent :frowning:

Thank you