Robert said:
I don't see how the fact that variable "xml" goes out of scope at some
point in time prevents using in a different class or method. You
simply have to pass it on at the time when it is _in_ scope.
Frankly, I get the impression that you lack some basic understanding
of how Ruby works, especially what objects and variables are. I
suggest you work through some introductory material or search the
archives of this group - there have been numerous discussions about
call by reference etc.
Hi,
Thanks for the advice. As u mentioned i'm new to ruby and i have still
to learn a lot. But the problem is that i have to prepare an assignment
in ruby regarding html extraction and to parse xml feeds from the html
content. First i have to read the url from a csv file, then i should
read the html contents of the url and then parse the xml. It is a tidy
job. I have completed a major part of it until i stuck into this part.
For providing further information I'm including the code
class hello
def hi(contents)
begin
contents.each do |content|
#scanning the content using regexp to fetch the url
url = content.scan(/(http:\/\/.*|https:\/\/.*)/i)
#getting the contents of the url using
'Net::HTTP.get' by communicating to the host server
response =
Net::HTTP.get_response(URI.parse("#{url}"))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then response =
Net::HTTP.get(URI.parse(response['location']))
else
response.error!
end
end
end
class extract
def parser(xmlData)
#extracting the feeds url from 'data' using 'regexp'
xmlData = response.scan(/<link
rel="alternate".*?href="(.*?xml|.*?rdf)"/i)
#rssData = data.scan(/<link rel="alternate"
type="application\/rss\+xml".*?href="(.*?)"/i)
#atomData = data.scan(/<link rel="alternate"
type="application\/atom\+xml".*?href="(.*?)"/i)
if xmlData
xmlData.each do |xml|
#getting the xml contents of the xml url
using 'Net::HTTP.get' by communicating to the host server
tags = Net::HTTP.get(URI.parse("#{xml}"))
#getting the text in between the description
tag
values =
tags.scan(/<description>(.*?)<\/description>/im)
# storing the description in a hash
details = Hash.new
details = {"#{xml}"=>"#{values}"}
end
end
end
puts "Processing complete!"
end
end
As u see the 'response' variable is the variable to be send as a
parameter to the extract class. But it is inside an
iterator(contents.each) I cannot pass the whole content to the next
class. Can u please give me a suggestion for that
Regards
Arun Kumar