2010-01-17 16 views
21

मुझे इसके लिए कोई दस्तावेज नहीं मिला है और न ही ट्यूटोरियल है। क्या ऐसा कुछ भी मौजूद है?मैं नोकोगिरी में XPath का उपयोग कैसे करूं?


doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr') 

कोड ऊपर मुझे किसी भी table कहीं भी मिल जाएगा,, विशेषता id "threadbits_forum_251" के बराबर के साथ एक tbody बच्चे है। लेकिन यह डबल // के साथ क्यों शुरू होता है? अंत में /tr क्यों है? अधिक जानकारी के लिए "Ruby Nokogiri Parsing HTML table II" देखें।


किसी को भी मुझे बता सकते हैं कि कैसे href, id, alt, src, आदि, Nokogiri का उपयोग कर निकालने के लिए?

td[3]/div[1]/a/text()' <--- extracts text 

मैं अन्य चीजों को कैसे निकाल सकता हूं?

उत्तर

41

लगता है आप को पढ़ने के लिए एक XPath Tutorial

आपका //table/tbody[@id="threadbits_forum_251"]/tr अभिव्यक्ति का मतलब है की जरूरत है:

  • // - कहीं भी अपने XML दस्तावेज में
  • table/tbody - एक tbody बच्चे
  • [@id="threadbits_forum_251"] के साथ एक मेज तत्व ले - जहां आईडी विशेषता "threadbits_forum_251"
  • के बराबर होती है
  • tr - और ले अपनी tr तत्वों

तो, मूल रूप से, आप जानना चाहते हैं:

  • विशेषताओं @
  • शर्तों के साथ शुरू होता है अंदर [] कोष्ठक

जाना अगर मैं एपीआई को समझ में आया, आप doc.xpath("td[3]/div[1]/a")["href"], या td[3]/div[1]/a/@href के साथ जा सकते हैं I एफ केवल एक <a> तत्व है।

+0

@ रूबेन्स धन्यवाद। और आप सही हैं कि मुझे XPath ट्यूटोरियल पढ़ने की ज़रूरत है। मैंने सोचा था कि यह nokorigi doc था मुझे पढ़ने की जरूरत है ... क्या आप जानते हैं कि कोई उपकरण है जो मुझे पूर्ण Xpath देगा यदि मैं HTML पृष्ठ पर क्लिक करता हूं और ऑब्जेक्ट करता हूं? – Radek

+8

मुझे नहीं पता, लेकिन XPath इतना कठिन नहीं है; अपने फाइल सिस्टम पर विचार करें, और मान लें कि प्रत्येक फ़ोल्डर एक एक्सएमएल तत्व है; इसलिए, जब आप अपना 'system32' फ़ोल्डर चुनते हैं, तो आपको' \ windows \ system32' पथ मिलेगा; बस '\\' 'से'/'को प्रतिस्थापित करें,' @ 'से शुरू होने वाले गुणों और' [] 'से शर्तों पर विचार करें और आप –

+2

पर जाने के लिए अच्छे हैं, मुझे पता है कि यह एक पुराना उत्तर है लेकिन xpath ट्यूटोरियल का लिंक है अब टूट गया मुझे लगता है कि अब यह होना चाहिए http://www.w3schools.com/xsl/xpath_intro.asp – Axiombadger

6

आपका XPath सही है और आप अपने खुद के सवाल का पहला हिस्सा (लगभग) दिए गए हैं लगता है:

doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr') 

"उपरोक्त कोड मुझे, किसी भी तालिका तालिका के टीआर मिल जाएगा कहीं भी, कि है विशेषता आईडी बराबर के साथ एक tbody बच्चे threadbits_forum_251 करने के लिए "


// का मतलब निम्नलिखित तत्व दस्तावेज़ में कहीं भी प्रदर्शित कर सकते हैं।

/tr अंत का मतलब है पर, मिलान तत्व की tr नोड मिलता है।

आपको प्रत्येक विशेषता को एक-एक करके निकालने की आवश्यकता नहीं है।बस Nokogiri में सभी चार गुण वाले संपूर्ण नोड मिलता है, और का उपयोग कर विशेषताओं मिलती है:

theNode['href'] 
theNode['src'] 

कहाँ theNode अपने Nokogiri Node वस्तु है।


संपादित करें:

खेद है कि मैं इन पुस्तकालयों उपयोग नहीं किया है, लेकिन मैं XPath मूल्यांकन और पार्स मशीनीकरण द्वारा किया जा रहा है लगता है। तो यहां बताया गया है कि आप एक ही समय में संपूर्ण तत्व और उसके गुण कैसे प्राप्त करेंगे।

doc.xpath("td[3]/div[1]/a").each do |anchor| 
    puts anchor['href'] 
    puts anchor['src'] 
    ... 
end 
+0

@Anurag अच्छा स्पष्टीकरण के लिए धन्यवाद। मैं मैकेनाइजेशन का उपयोग शुद्ध नोकोगिरी नहीं कर रहा हूं, क्या मैं किसी भी तरह [[href '] का उपयोग नहीं कर सकता [: शीर्षक, 'टीडी [3]/div [1]/एक/पाठ()'] ,? मैं पाठ – Radek

+1

'[: पता, 'td [3]/div [1]/a/@ href']' टेक्स्ट के बजाय href निकालना चाहता हूं? –

+0

मैं नोकोगिरी ट्यूटोरियल खोज रहा था और अपने उत्तर में आया .. हेहे :) – Anurag

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