5
sto imparando come utilizzare nokogiri e qualche domanda mi venne in base al codice di seguitocome utilizzare i metodi Nokogiri .xpath & .at_xpath
require 'rubygems'
require 'mechanize'
post_agent = WWW::Mechanize.new
post_page = post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')
puts "\nabsolute path with tbody gives nil"
puts post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]').xpath('text()').to_s.strip.inspect
puts "\n.at_xpath gives an empty string"
puts post_page.parser.at_xpath("//div[@id='posts']/div/table/tr/td/div[2]").at_xpath('text()').to_s.strip.inspect
puts "\ntwo lines solution with .at_xpath gives an empty string"
rows = post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")
puts rows[0].at_xpath('text()').to_s.strip.inspect
puts
puts "two lines working code"
rows = post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")
puts rows[0].xpath('text()').to_s.strip
puts "\none line working code"
puts post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")[0].xpath('text()').to_s.strip
puts "\nanother one line code"
puts post_page.parser.at_xpath("//div[@id='posts']/div/table/tr/td/div[2]").xpath('text()').to_s.strip
puts "\none line code with full path"
puts post_page.parser.xpath("/html/body/div/div/div/div/div/table/tr/td/div[2]")[0].xpath('text()').to_s.strip
- è meglio utilizzare // o/in xpath? @AnthonyWJones dice che "l'uso di un non-prefisso //" non è una buona idea
- Ho dovuto rimuovere tbody da qualsiasi xpath funzionante altrimenti ho ottenuto il risultato 'nil'. Come è possibile rimuovere un elemento da xpath per far funzionare le cose?
- devo utilizzare .xpath due volte per estrarre i dati se non si utilizza xpath completo?
- perché non riesco a eseguire .at_xpath per estrarre i dati? funziona bene here qual è la differenza?
@Simone Carletti: grazie per quello. Forse tutte le mie domande arrivano perché non so leggere la documentazione su http://nokogiri.org. Non so come trovare nulla sul chiamare il metodo di testo sul nodo. Sarebbe possibile scrivere di più a riguardo. Ho già trovato il mio script un po 'lento, sarebbe bello renderlo più veloce. – Radek
Ho trovato che un segnaposto XPath è una vera espressione xpath. Quindi cosa significa usare * come segnaposto? – Radek
* indica qualsiasi nodo. Ad esempio, in '/ node/foo/one' e'/node/bar/one', '/ node/*/one' corrisponde a entrambi i percorsi. –