Class that will build the hash while the XML document is being parsed using SAX events.

Methods

Included Modules

  • LibXML::XML::SaxParser::Callbacks

Constants

CONTENT_KEY = "__content__".freeze
HASH_SIZE_KEY = "__hash_size__".freeze

Attributes

[R] hash

Instance Public methods

current_hash()

📝 Source code
# File activesupport/lib/active_support/xml_mini/libxmlsax.rb, line 21
      def current_hash
        @hash_stack.last
      end
🔎 See on GitHub

on_cdata_block(string)

Alias for: on_characters

on_characters(string)

Also aliased as: on_cdata_block
📝 Source code
# File activesupport/lib/active_support/xml_mini/libxmlsax.rb, line 55
      def on_characters(string)
        current_hash[CONTENT_KEY] << string
      end
🔎 See on GitHub

on_end_document()

📝 Source code
# File activesupport/lib/active_support/xml_mini/libxmlsax.rb, line 30
      def on_end_document
        @hash = @hash_stack.pop
        @hash.delete(CONTENT_KEY)
      end
🔎 See on GitHub

on_end_element(name)

📝 Source code
# File activesupport/lib/active_support/xml_mini/libxmlsax.rb, line 48
      def on_end_element(name)
        if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == ""
          current_hash.delete(CONTENT_KEY)
        end
        @hash_stack.pop
      end
🔎 See on GitHub

on_start_document()

📝 Source code
# File activesupport/lib/active_support/xml_mini/libxmlsax.rb, line 25
      def on_start_document
        @hash = { CONTENT_KEY => "".dup }
        @hash_stack = [@hash]
      end
🔎 See on GitHub

on_start_element(name, attrs = {})

📝 Source code
# File activesupport/lib/active_support/xml_mini/libxmlsax.rb, line 35
      def on_start_element(name, attrs = {})
        new_hash = { CONTENT_KEY => "".dup }.merge!(attrs)
        new_hash[HASH_SIZE_KEY] = new_hash.size + 1

        case current_hash[name]
        when Array then current_hash[name] << new_hash
        when Hash  then current_hash[name] = [current_hash[name], new_hash]
        when nil   then current_hash[name] = new_hash
        end

        @hash_stack.push(new_hash)
      end
🔎 See on GitHub