Nokogiri: كيفية اختيار العقد عن طريق مطابقة النص؟

StackOverflow https://stackoverflow.com/questions/1474688

  •  16-09-2019
  •  | 
  •  

سؤال

إذا كان لدي مجموعة من العناصر مثل:

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

هل هناك طريقة نوكوجيري المدمجة التي من شأنها أن تجعلني جميعا، على سبيل المثال، ع العناصر التي تحتوي على النص "Apple"؟ (سوف يتطابق عنصر المثال أعلاه، على سبيل المثال).

هل كانت مفيدة؟

المحلول

يستطيع Nokogiri القيام بذلك (الآن) باستخدام Extensions JQuery To 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"

نصائح أخرى

هنا هو 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>

امل ان يساعد

يمكنك أيضا القيام بذلك بسهولة جدا نيكو:

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

حاول استخدام هذا XPath:

p = doc.xpath('//p[//*[contains(text(), "Apple")]]')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top