Nokogiri: كيفية اختيار العقد عن طريق مطابقة النص؟
سؤال
إذا كان لدي مجموعة من العناصر مثل:
<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")]]')
لا تنتمي إلى StackOverflow