2013-08-27 8 views
18

मैं Nokogiri का उपयोग के लिए एक ही सामग्री के साथ html पृष्ठ को पार्स:बच्चों के बिना नोड टेक्स्ट कैसे प्राप्त करें?

<p class="parent"> 
    Useful text 
    <br> 
    <span class="child">Useless text</span> 
</p> 

जब मैं विधि page.css('p.parent').text Nokogiri रिटर्न 'उपयोगी पाठ अनुपयोगी पाठ' कहते हैं। लेकिन मुझे केवल 'उपयोगी पाठ' की आवश्यकता है।

कैसे बच्चों के बिना नोड पाठ पाने के लिए?

उत्तर

26

XPath द्वारा संशोधित किया जाएगा, पाठ नोड्स के चयन के लिए text() नोड परीक्षण भी शामिल है ताकि आप कर सकता है:

page.xpath('//p[@class="parent"]/text()') 

एचटीएमएल वर्गों का चयन करने के लिए काफी हो सकता है XPath का उपयोग करना मुश्किल अगर प्रश्न में तत्व एक से अधिक वर्ग से संबंधित हो सकता है, तो यह आदर्श नहीं हो सकता है।

सौभाग्य Nokogiri सीएसएस के लिए text() चयनकर्ता कहते हैं, तो आप उपयोग कर सकते हैं:

page.css('p.parent > text()') 

पाठ नोड्स p.parent के प्रत्यक्ष बच्चे हैं मिलता है। यह कुछ नोड्स भी लौटाएगा जो केवल व्हाइटस्पेस हैं, इसलिए आपको उन्हें फ़िल्टर करना पड़ सकता है।

+1

टेक्स्ट() चयनकर्ता सबसे साफ समाधान प्रतीत होता है। धन्यवाद! –

0

आपको page.css('p.parent').children.remove का उपयोग करने में सक्षम होना चाहिए।

फिर आपके page.css('p.parent').text बच्चों के नोड्स के बिना टेक्स्ट वापस कर देगा।

नोट: pageremove

संबंधित मुद्दे

 संबंधित मुद्दे