2011-03-22 77 views
9

比方说,我的HTML文件是这样的:如何获得Nokogiri中的下一个HTML元素?

<div class="headline">News</div> 
<p>Some interesting news here</p> 
<div class="headline">Sports</div> 
<p>Baseball is fun!</p> 

我可以得到headline的div用下面的代码:

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

url = "mypage.html" 
doc = Nokogiri::HTML(open(url)) 

doc.css(".headline").each do |item| 
    puts item.text 
end 

但是我怎么访问内容在以下p标记,以便NewsSome interesting news here等有关?

回答

28

你想Node#next_element

doc.css(".headline").each do |item| 
    puts item.text 
    puts item.next_element.text 
end 

还有item.next,但也将返回文本节点,其中item.next_element只会返回元素节点(如p)。

+0

当我使用'next_element'时,我得到一个'nil'对象**编辑**它看起来像''标题“div'是在'span'里面。我将更新XML示例 – cbmeeks 2011-03-22 17:00:08

+1

这没什么用。我必须做'item.parent.next_element',因为标题div在span标签内。谢谢! – cbmeeks 2011-03-22 17:06:57

+0

然后您可能需要验证该HTML。如果我记得正确的div不应该在span标签内。 – 2011-03-27 07:28:12