ruby – 如何搜索“文本”,然后从找到的节点遍历DOM?

前端之家收集整理的这篇文章主要介绍了ruby – 如何搜索“文本”,然后从找到的节点遍历DOM?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有网页,我需要从中删除一些数据.问题是,每个页面可能有也可能没有特定的数据,或者它可能在DOM中高于或低于它的额外数据,并且没有CSS ID可以说.

通常我可以使用CSS ids或XPath来获取我正在寻找的节点.在这种情况下,我没有这个选择.我想要做的是搜索标签”文本,然后在下一个< TD>中获取数据.节点:

  1. <tr>
  2. <td><b>Name:</b></td>
  3. <td>Joe Smith <small><a href="/Joe"><img src="/joe.png"></a></small></td>
  4. </tr>

在上面的HTML中,我会搜索

  1. doc.search("[text()*='Name:']")

在我需要的数据之前获取节点,但我不知道如何从那里导航.

解决方法

next_element可能是您要查找的方法.
  1. require 'nokogiri'
  2.  
  3. data = File.read "html.htm"
  4.  
  5. doc = Nokogiri::HTML data
  6.  
  7. els = doc.search "[text()*='Name:']"
  8. el = els.first
  9.  
  10. puts "Found element:"
  11. puts el
  12. puts
  13.  
  14. puts "Parent element:"
  15. puts el.parent
  16. puts
  17.  
  18. puts "Parent's next_element():"
  19. puts el.parent.next_element
  20.  
  21. # Output:
  22. #
  23. # Found element:
  24. # <b>Name:</b>
  25. #
  26. # Parent element:
  27. # <td>
  28. # <b>Name:</b>
  29. # </td>
  30. #
  31. # Parent's next_element():
  32. # <td>Joe Smith <small><a href="/Joe"><img src="/joe.png"></a></small>
  33. # </td>

请注意,由于文本位于< b>< / b>之内标签,您必须上升一个级别(到找到的元素的父< td>),然后才能进入下一个兄弟.如果HTML结构不稳定,则必须找到第一个父项,这是< td>并从那里走.

猜你在找的Ruby相关文章