1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

Add to_hash functionality to XMLUtils

This commit is contained in:
Daniel Molina 2011-01-18 19:49:34 +01:00
parent 1ad9a5d176
commit 0291b75d94

View File

@ -215,6 +215,55 @@ module OpenNebula
return str
end
def to_hash
merge_element!({}, @xml.document.root)
end
private
def merge_element!(hash, element)
merge!(hash, element.name, prepare_element(element))
end
def prepare_element(element)
if NOKOGIRI
if element.children.length == 1
element.children.first.text
else
hash = {}
element.children.each do |c|
if c.element?
merge_element!(hash, c)
elsif c.text?
next
end
end
hash
end
else
if element.has_elements?
hash = {}
element.each_element {|child| merge_element!(hash, child) }
hash
elsif element.has_text?
element.text
end
end
end
def merge!(hash, key, value)
if hash.has_key?(key)
if hash[key].instance_of?(Array)
hash[key] << value
else
hash[key] = [hash[key], value]
end
else
hash[key] = value
end
hash
end
end
###########################################################################