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:
parent
1ad9a5d176
commit
0291b75d94
@ -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
|
||||
|
||||
###########################################################################
|
||||
|
Loading…
x
Reference in New Issue
Block a user