diff options
Diffstat (limited to 'activesupport/lib/active_support/xml_mini')
-rw-r--r-- | activesupport/lib/active_support/xml_mini/nokogiri.rb | 34 | ||||
-rw-r--r-- | activesupport/lib/active_support/xml_mini/rexml.rb | 3 |
2 files changed, 15 insertions, 22 deletions
diff --git a/activesupport/lib/active_support/xml_mini/nokogiri.rb b/activesupport/lib/active_support/xml_mini/nokogiri.rb index 847ab0152b..17bacd8441 100644 --- a/activesupport/lib/active_support/xml_mini/nokogiri.rb +++ b/activesupport/lib/active_support/xml_mini/nokogiri.rb @@ -18,7 +18,7 @@ module ActiveSupport {} else data.ungetc(char) - doc = Nokogiri::XML(data) + doc = Nokogiri::XML(data) { |cfg| cfg.noblanks } raise doc.errors.first if doc.errors.length > 0 doc.to_hash end @@ -39,33 +39,25 @@ module ActiveSupport # hash:: # Hash to merge the converted element into. def to_hash(hash = {}) - hash[name] ||= attributes_as_hash + attributes = attributes_as_hash + if hash[name] + hash[name] = [hash[name]].flatten + hash[name] << attributes + else + hash[name] ||= attributes + end - walker = lambda { |memo, parent, child, callback| - next if child.blank? && 'file' != parent['type'] + children.each { |child| + next if child.blank? && 'file' != self['type'] - if child.text? - (memo[CONTENT_ROOT] ||= '') << child.content + if child.text? || child.cdata? + (attributes[CONTENT_ROOT] ||= '') << child.content next end - name = child.name - - child_hash = child.attributes_as_hash - if memo[name] - memo[name] = [memo[name]].flatten - memo[name] << child_hash - else - memo[name] = child_hash - end - - # Recursively walk children - child.children.each { |c| - callback.call(child_hash, child, c, callback) - } + child.to_hash attributes } - children.each { |c| walker.call(hash[name], self, c, walker) } hash end diff --git a/activesupport/lib/active_support/xml_mini/rexml.rb b/activesupport/lib/active_support/xml_mini/rexml.rb index aaf4bb6bfd..3db48ce5a3 100644 --- a/activesupport/lib/active_support/xml_mini/rexml.rb +++ b/activesupport/lib/active_support/xml_mini/rexml.rb @@ -1,3 +1,4 @@ +require 'active_support/core_ext/kernel/reporting' require 'active_support/core_ext/object/blank' # = XmlMini ReXML implementation @@ -24,7 +25,7 @@ module ActiveSupport {} else data.ungetc(char) - require 'rexml/document' unless defined?(REXML::Document) + silence_warnings { require 'rexml/document' } unless defined?(REXML::Document) doc = REXML::Document.new(data) merge_element!({}, doc.root) end |