Method: ActiveSupport::XmlMini_Nokogiri::Conversions::Node#to_hash

Defined in:
activesupport/lib/active_support/xml_mini/nokogiri.rb

#to_hash(hash = {}) ⇒ Object

Convert XML document to hash.

hash

Hash to merge the converted element into.



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'activesupport/lib/active_support/xml_mini/nokogiri.rb', line 47

def to_hash(hash={})
  node_hash = {}

  # Insert node hash into parent hash correctly.
  case hash[name]
    when Array then hash[name] << node_hash
    when Hash  then hash[name] = [hash[name], node_hash]
    when nil   then hash[name] = node_hash
  end

  # Handle child elements
  children.each do |c|
    if c.element?
      c.to_hash(node_hash)
    elsif c.text? || c.cdata?
      node_hash[CONTENT_ROOT] ||= ''
      node_hash[CONTENT_ROOT] << c.content
    end
  end

  # Remove content node if it is blank and there are child tags
  if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank?
    node_hash.delete(CONTENT_ROOT)
  end

  # Handle attributes
  attribute_nodes.each { |a| node_hash[a.node_name] = a.value }

  hash
end