Module: LibXML::Conversions::Node
- Defined in:
- lib/active_support/xml_mini/libxml.rb
Overview
:nodoc:
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.
43 44 45 46 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 |
# File 'lib/active_support/xml_mini/libxml.rb', line 43 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 each_child do |c| if c.element? c.to_hash(node_hash) elsif c.text? || c.cdata? node_hash[CONTENT_ROOT] ||= "".dup node_hash[CONTENT_ROOT] << c.content end end # Remove content node if it is blank if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank? node_hash.delete(CONTENT_ROOT) end # Handle attributes each_attr { |a| node_hash[a.name] = a.value } hash end |