Использовать Tempfile дважды? - PullRequest
0 голосов
/ 07 ноября 2011

У меня проблема с простой программой из-за того, что, как я считаю, связано с Tempfiles. Я использую open-uri и nokogiri и пытаюсь выполнить поиск по документу с помощью регулярных выражений, а также поиск по xpath с помощью nokogiri. Тем не менее, кажется, что я не могу сделать это, не сделав два отдельных запроса на документ и, таким образом, создав два отдельных Tempfiles. Это работает, но делает два запроса:

require 'open-uri'
require 'nokogiri'

source_url = "http://foo.com/"
#grab html document and assign it a variable
doc = open(source_url)
#grab html document, convert to Nokogiri object and assign to variable.
noko_doc = Nokogiri::HTML(open(source_url))

#create array of stuff. 
foo = noko_doc.xpath("//some element").collect { |e| e }
#create another array of stuff
bar = []
doc.each do |f|
    f.each do |line|
        abstract_matches = line.scan(/some regex string/)                                  
        unless abstract_matches.empty?
            abstract_matches.collect! do |item|
                if item.to_s.match(/yet another regex string/) 
                    item
                end
            end.compact!
            unless abstract_matches.empty?
                abstract_matches.each { |match| bar << "#{ match } / " }
            end
        end
    end
end
#all for this
puts foo + bar

Я бы предпочел, чтобы я мог передать переменную 'doc' в Nokogiri :: HTML, а также перебрать ее. Помощь

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Редко повторять Tempfile. Более распространенным является такой доступ:

html = open(source_url).read
noko_doc = Nokogiri::HTML(html)
html.split("\n").each do |line|
  # do stuff
end
1 голос
/ 07 ноября 2011

Вы можете разобрать HTML из строки, см. учебное пособие .

Не могли бы вы просто вставить doc в строку и получить от нее анализ Nokogiri?

...