From 0291b75d941f238f66a67e0bc6e3422589b651a7 Mon Sep 17 00:00:00 2001 From: Daniel Molina Date: Tue, 18 Jan 2011 19:49:34 +0100 Subject: [PATCH] Add to_hash functionality to XMLUtils --- src/oca/ruby/OpenNebula/XMLUtils.rb | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/oca/ruby/OpenNebula/XMLUtils.rb b/src/oca/ruby/OpenNebula/XMLUtils.rb index 898719b675..f2b31b1586 100644 --- a/src/oca/ruby/OpenNebula/XMLUtils.rb +++ b/src/oca/ruby/OpenNebula/XMLUtils.rb @@ -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 ###########################################################################