+++ /dev/null
-require 'nokogiri'
-
-# = XmlMini Nokogiri implementation
-module ActiveSupport
- module XmlMini_Nokogiri #:nodoc:
- extend self
-
- # Parse an XML Document string into a simple hash using libxml / nokogiri.
- # string::
- # XML Document string to parse
- def parse(string)
- if string.blank?
- {}
- else
- doc = Nokogiri::XML(string) { |cfg| cfg.noblanks }
- raise doc.errors.first if doc.errors.length > 0
- doc.to_hash
- end
- end
-
- module Conversions
- module Document
- def to_hash
- root.to_hash
- end
- end
-
- module Node
- CONTENT_ROOT = '__content__'
-
- # Convert XML document to hash
- #
- # hash::
- # Hash to merge the converted element into.
- def to_hash(hash = {})
- attributes = attributes_as_hash
- if hash[name]
- hash[name] = [hash[name]].flatten
- hash[name] << attributes
- else
- hash[name] ||= attributes
- end
-
- children.each { |child|
- next if child.blank? && 'file' != self['type']
-
- if child.text? || child.cdata?
- (attributes[CONTENT_ROOT] ||= '') << child.content
- next
- end
-
- child.to_hash attributes
- }
-
- hash
- end
-
- def attributes_as_hash
- Hash[*(attribute_nodes.map { |node|
- [node.node_name, node.value]
- }.flatten)]
- end
- end
- end
-
- Nokogiri::XML::Document.send(:include, Conversions::Document)
- Nokogiri::XML::Node.send(:include, Conversions::Node)
- end
-end