Robert Klemme wrote:
> 2009/3/26 Arun Kumar <arunkumar / innovaturelabs.com>:
>> Robert Klemme wrote:
>>> Where is "xml in an array"? The variable "xml" references an Array
>>> because you use String#scan (see above). You can simply iterate that
>>> Array as any other Array, too. Where is the problem?
>>
>> The problem is that i need to parse the xml from the feeds url and the
>> code for it is written in another class. So I need to pass the feed url
>> ie.'xml'. Since it is written inside an iterator ie. in between each
>> do|content|, i cannot pass it as a prameter to the other class since xml
>> variable will not be accessible after the iterator ends. Please help me.
> 
> 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
-- 
Posted via http://www.ruby-forum.com/.