Sha256: c62e0412e4ae25de3b096e5cf20c868f3d2d3b8066f881df0c6b6dd9212ab0ec
Contents?: true
Size: 976 Bytes
Versions: 5
Compression:
Stored size: 976 Bytes
Contents
require "nokogiri" require "nori/xml_utility_node" module Nori module Parser # = Nori::Parser::Nokogiri # # Nokogiri SAX parser. module Nokogiri class Document < ::Nokogiri::XML::SAX::Document def stack @stack ||= [] end def start_element(name, attrs = []) stack.push Nori::XMLUtilityNode.new(name, Hash[*attrs.flatten]) end def end_element(name) if stack.size > 1 last = stack.pop stack.last.add_node last end end def characters(string) stack.last.add_node(string) unless string.strip.length == 0 || stack.empty? end alias cdata_block characters end def self.parse(xml) document = Document.new parser = ::Nokogiri::XML::SAX::Parser.new document parser.parse xml document.stack.length > 0 ? document.stack.pop.to_hash : {} end end end end
Version data entries
5 entries across 5 versions & 1 rubygems