2011-03-22 8 views
9

Digamos mi documento HTML es como:¿Cómo obtengo el siguiente elemento HTML en Nokogiri?

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

puedo conseguir el headline divs con el siguiente código:

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 

Pero ¿cómo acceder a los contenidos en el p etiqueta siguiente para que News está relacionado con Some interesting news here, etc.?

Respuesta

28

¿Quieres Node#next_element:

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

También hay item.next, sino que también devolverá los nodos de texto, donde item.next_element devolverá sólo nodos de elementos (como p).

+0

Obtengo un objeto 'nil' cuando uso' next_element' ** EDIT ** Parece que el '' div' titular' está dentro de un 'span'. Actualizaré el ejemplo de XML – cbmeeks

+1

Eso funcionó. Tenía que hacer 'item.parent.next_element' porque el encabezado div estaba dentro de una etiqueta span. ¡Gracias! – cbmeeks

+0

Es posible que desee validar ese HTML a continuación. Si recuerdo que los divs correctos no deberían estar dentro de las etiquetas span. –

Cuestiones relacionadas