def parse
products = []
doc = REXML::Document.new self
begin
total_results = doc.elements['ProductInfo/TotalResults'].text.to_i
rescue
end
doc.elements.each('ProductInfo/Details') do |detail|
product = Product.new(detail.attributes['url'])
detail.elements.each do |property|
if property.has_elements?
case property.name
when 'BrowseList'
browsenames = property.elements.map do |e|
e.elements.map { |e| e.text }
end.flatten
product.instance_variable_set(:@browselist, browsenames)
when 'Reviews'
avg = property.elements[1].text
tcr = property.elements[2].text
list =
property.elements.map { |e| e.elements.map { |e| e.text } }
reviews = []
list.each do |r|
reviews << Product::Review.new(*r) unless r.empty?
end
product.instance_variable_set(:@avgcustomerrating, avg)
if tcr.to_i > 0
product.instance_variable_set(:@totalcustomerreviews, tcr)
end
product.instance_variable_set(:@reviews, reviews)
else
members = property.elements.map { |e| e.text }
product.instance_variable_set(
"@#{property.name.downcase}".to_sym, members)
end
else
product.instance_variable_set(
"@#{property.name.downcase}".to_sym, property.text)
end
end
products << product
end
products
end