Module: MultiXml::Parsers::Libxml2Parser
Overview
:nodoc:
Instance Method Summary collapse
-
#node_to_hash(node, hash = {}) ⇒ Object
Convert XML document to hash.
-
#parse(_) ⇒ Object
Parse an XML Document IO into a simple hash.
Instance Method Details
#node_to_hash(node, hash = {}) ⇒ Object
Convert XML document to hash
node:: The XML node object to convert to a hash.
hash:: Hash to merge the converted element into.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/multi_xml/parsers/libxml2_parser.rb', line 11 def node_to_hash(node, hash = {}) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength node_hash = {MultiXml::CONTENT_ROOT => ""} name = node_name(node) # Insert node hash into parent hash correctly. case hash[name] when Array hash[name] << node_hash when Hash hash[name] = [hash[name], node_hash] when NilClass hash[name] = node_hash end # Handle child elements each_child(node) do |c| if c.element? node_to_hash(c, node_hash) elsif c.text? || c.cdata? node_hash[MultiXml::CONTENT_ROOT] += c.content end end # Remove content node if it is empty node_hash.delete(MultiXml::CONTENT_ROOT) if node_hash[MultiXml::CONTENT_ROOT].strip.empty? # Handle attributes each_attr(node) do |a| key = node_name(a) v = node_hash[key] node_hash[key] = ((v) ? [a.value, v] : a.value) end hash end |
#parse(_) ⇒ Object
Parse an XML Document IO into a simple hash. xml:: XML Document IO to parse
51 52 53 |
# File 'lib/multi_xml/parsers/libxml2_parser.rb', line 51 def parse(_) raise(NotImplementedError, "inheritor should define #{__method__}") end |