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.

[View source]

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

Raises:

  • (NotImplementedError)
[View source]

51
52
53
# File 'lib/multi_xml/parsers/libxml2_parser.rb', line 51

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