Class: Nokogireader::Reader
- Inherits:
-
Object
- Object
- Nokogireader::Reader
- Defined in:
- lib/nokogireader/reader.rb
Class Method Summary collapse
- .element(name, opts = {}, &block) ⇒ Object
- .elements(name, opts = {}, &block) ⇒ Object
- .root_definition ⇒ Object
Instance Method Summary collapse
Class Method Details
.element(name, opts = {}, &block) ⇒ Object
7 8 9 10 11 |
# File 'lib/nokogireader/reader.rb', line 7 def self.element(name, opts = {}, &block) root_definition.configure do element(name, opts, &block) end end |
.elements(name, opts = {}, &block) ⇒ Object
13 14 15 16 17 |
# File 'lib/nokogireader/reader.rb', line 13 def self.elements(name, opts = {}, &block) root_definition.configure do elements(name, opts, &block) end end |
.root_definition ⇒ Object
3 4 5 |
# File 'lib/nokogireader/reader.rb', line 3 def self.root_definition @root ||= Definition.new end |
Instance Method Details
#read(xml) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/nokogireader/reader.rb', line 19 def read(xml) root = self.class.root_definition defstack = [] data = ReadData.new(nil, root, nil) build_xml_reader(xml).each do |n| if n.node_type == 1 d = defstack.last || root defstack << (d.accept?(n) ? d.children[n.name] : nil) data = data.add_child(defstack.last, n) if defstack.last elsif n.node_type == 3 data.text = n.value if defstack.last && defstack.last.accept?(n) end if (n.node_type == 15 || n.self_closing?) && (old_def = defstack.pop) old_def.on_traversed(self, data) data = data.parent data.clear_child_for(n) if old_def.dont_store_data end end data end |