def to_hash(hash = {})
node_hash = {}
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
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
if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank?
node_hash.delete(CONTENT_ROOT)
end
attribute_nodes.each { |a| node_hash[a.node_name] = a.value }
hash
end