Module: MultiXml::Parsers::Libxml2Parser

Included in:
Libxml, Nokogiri, Oga
Defined in:
lib/multi_xml/parsers/libxml2_parser.rb

Overview

:nodoc:

Instance Method Summary collapse

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
47
48
# File 'lib/multi_xml/parsers/libxml2_parser.rb', line 11

def node_to_hash(node, hash = {}) # rubocop:disable AbcSize, CyclomaticComplexity, MethodLength, PerceivedComplexity
  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
  if node_hash[MultiXml::CONTENT_ROOT].strip.empty?
    node_hash.delete(MultiXml::CONTENT_ROOT)
  end

  # 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

Raises:

  • (NotImplementedError)

53
54
55
# File 'lib/multi_xml/parsers/libxml2_parser.rb', line 53

def parse(_)
  raise(NotImplementedError.new("inheritor should define #{__method__}"))
end