Class: PseudoXml::XPathQuery
- Defined in:
- lib/pseudo_xml/xpath_query.rb
Class Method Summary collapse
Instance Method Summary collapse
- #end_element ⇒ Object
-
#initialize(xpath, &b) ⇒ XPathQuery
constructor
A new instance of XPathQuery.
- #start_element(element_text) ⇒ Object
- #xpath_match? ⇒ Boolean
Methods inherited from Collector
Constructor Details
#initialize(xpath, &b) ⇒ XPathQuery
Returns a new instance of XPathQuery.
17 18 19 20 21 22 23 |
# File 'lib/pseudo_xml/xpath_query.rb', line 17 def initialize(xpath, &b) @parsed_elements = [] @current_path = [] @xpath = xpath.split('/') @xpath.shift if @xpath.first == '' @block = b end |
Class Method Details
Instance Method Details
#end_element ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/pseudo_xml/xpath_query.rb', line 43 def end_element @current_path.pop if @parsed_elements.size > 1 node = @parsed_elements.pop @parsed_elements.last.elements << node elsif @parsed_elements.size == 1 @block.call(@parsed_elements.pop) end end |
#start_element(element_text) ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'lib/pseudo_xml/xpath_query.rb', line 25 def start_element(element_text) element_name = element_text[/\w+/] @current_path.push element_name if @parsed_elements.size > 1 || xpath_match? @parsed_elements.push Element.new(element_text[/\w+/]) end end |
#xpath_match? ⇒ Boolean
35 36 37 38 39 40 41 |
# File 'lib/pseudo_xml/xpath_query.rb', line 35 def xpath_match? @xpath.size.times do |i| return false unless @xpath[i] == '*' || @xpath[i] == @current_path[i] end return true end |