Module: ActiveSupport::XmlMini_Nokogiri::Conversions::Node
- Defined in:
- activesupport/lib/active_support/xml_mini/nokogiri.rb
Overview
:nodoc:
Constant Summary
- CONTENT_ROOT =
'__content__'.freeze
Instance Method Summary (collapse)
-
- (Object) to_hash(hash = {})
Convert XML document to hash.
Instance Method Details
- (Object) to_hash(hash = {})
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 |