Module: ActiveSupport::XmlMini_Nokogiri::Conversions::Node
- Defined in:
- lib/active_support/xml_mini/nokogiri.rb
Constant Summary collapse
- CONTENT_ROOT =
'__content__'.freeze
Instance Method Summary collapse
-
#to_hash(hash = {}) ⇒ Object
Convert XML document to hash.
Instance Method Details
#to_hash(hash = {}) ⇒ Object
Convert XML document to hash
- hash
-
Hash to merge the converted element into.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/active_support/xml_mini/nokogiri.rb', line 35 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 else raise "Unexpected error during hash insertion!" 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 |