Pregunta

Tengo un documento y quiero extraer un par de elementos que son descendientes directos del elemento padre pero dejan de lado otros. El problema es que no obtengo los elementos en el orden en que aparecen en el documento. La razón podría ser que el selector CSS que estoy usando está mal ...

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

html = <<END
  <content>
    <p>Lorem</p>
    <div>
      FOO
      <p>BAR</p>
    </div>
    <h1>Ipsum</h1>
    <p>Dolor</p>
    <div>
      BAR
      <h2>FOO</h2>
    </div>
    <h2>Sit</h2>
    <p>Amet</p>
  </html>
END

Nokogiri::HTML(html).css('content > p, content > h1, content > h2').inner_html # "<p>Lorem</p><p>Dolor</p><p>Amet</p><h1>Ipsum</h1><h2>Sit</h2>"

Lo que quiero es

<p>Lorem</p><h1>Ipsum</h1><p>Dolor</p><h2>Sit</h2><p>Amet</p>
¿Fue útil?

Solución

Intente usar este XPath:

//content/p|//content/h1|//content/h2

Otros consejos

Desea que los diferentes elementos se enumeren de la forma en que aparecen en el documento, pero como puede ver, obtiene los elementos de acuerdo con el orden del selector css.

Para resolver esto, tendría que agregar un atributo de clase a los elementos, de modo que seleccione todos los elementos con esa clase, que solo use un selector css, lo que implicaría que los elementos estarían en el orden correcto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top