From: aidy Date: 2008-07-01T02:22:14+09:00 Subject: Re: is it possible to create a hash dynamically? Hi stefano, On 30 Jun, 17:46, Stefano Crocco wrote: > On Monday 30 June 2008, aidy wrote: > > > The problem is in the line > > @xml_data = {node.name => node.text} > > At each iteration, you discard the old content of the variable and replace it > with a new hash. This way, at the end of the cycle, the @xml_data will be a > hash containing only the text of the last node. > > To do what you want, you should set @xml_data to an empty hash outside the > outer each, then store the new node in the hash at each iteration: > > def extract(xml, path) >   require 'rexml/document' >   xml = xml.to_s.gsub("utf-16", "utf-8") >   doc = REXML::Document.new(xml) >   @xml_data = {} >   doc.root.each_element(path) do |element| >       element.each_element do |node| >       puts "name: #{node.name} text: #{node.text}" >       @xml_data[node.name] => node.text} >     end >   end >   return @xml_data > end > > By the way, are you sure @xml_data needs to be an instance variable? From the > way you use it in the piece of code you posted, it seems it should be a local > variable. > > I hope this helps > > Stefano- Hide quoted text - > > - Show quoted text - Thanks for the help. After the syntax change, all elements are found. Not so sure why my IDE did not pick them all up, the first time I ran the change! Aidy