Domanda

Se ho un sacco di elementi come:

<p>A paragraph <ul><li>Item 1</li><li>Apple</li><li>Orange</li></ul></p>

C'è un costruito in nokogiri metodo che mi avrebbe portato tutti, per esempio, gli elementi di p che contengono il testo "Apple"?(l'esempio è un elemento che dovrebbe corrispondere, per esempio).

È stato utile?

Soluzione

Nokogiri può fare questo (ora) utilizzando le estensioni jQuery ai CSS:

require 'nokogiri'

html = '
<html>
  <body>
    <p>foo</p>
    <p>bar</p>
  </body>
</html>
'

doc = Nokogiri::HTML(html)
doc.at('p:contains("bar")').text.strip
=> "bar"

Altri suggerimenti

Qui è un'espressione XPath che funziona:

require 'nokogiri'

doc = Nokogiri::HTML(DATA)
p doc.xpath('//li[contains(text(), "Apple")]')

__END__
<p>A paragraph <ul><li>Item 1</li><li>Apple</li><li>Orange</li></ul></p>

Speranza che aiuta

È anche possibile fare questo molto facilmente con Nikkou :

doc.search('p').text_includes('bar')

Provare a utilizzare questo XPath:

p = doc.xpath('//p[//*[contains(text(), "Apple")]]')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top