Подтвердить что ты не робот

Nokogiri: Как выбрать узлы путем сопоставления текста?

Если у меня есть куча таких элементов, как:

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

Есть ли встроенный метод nokogiri, который мог бы получить меня, например, p элементов, содержащих текст "Apple"? (например, примерный элемент соответствовал бы).

4b9b3361

Ответ 1

Nokogiri может это сделать (теперь) с помощью расширений jQuery для 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"

Ответ 2

Вот работает XPath:

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>

Надеюсь, что поможет

Ответ 3

Попробуйте использовать этот XPath:

p = doc.xpath('//p[//*[contains(text(), "Apple")]]')

Ответ 4

Вы также можете сделать это очень легко с помощью Nikkou:

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