class REXML::Parsers::PullParser
Using the Pull Parser¶ ↑
This API is experimental, and subject to change.
parser = PullParser.new( "<a>text<b att='val'/>txet</a>" ) while parser.has_next? res = parser.next puts res[1]['att'] if res.start_tag? and res[0] == 'b' end
See the PullEvent class for information on the content of the results. The data is identical to the arguments passed for the various events to the StreamListener API.
Notice that:
parser = PullParser.new( "<a>BAD DOCUMENT" ) while parser.has_next? res = parser.next raise res[1] if res.error? end
Nat Price gave me some good ideas for the API.
Public Class Methods
                              new(stream)
                              click to toggle source
                            
                            # File rexml-3.2.5/lib/rexml/parsers/pullparser.rb, line 38 def initialize stream @entities = {} @listeners = nil @parser = BaseParser.new( stream ) @my_stack = [] end
Public Instance Methods
                              add_listener( listener )
                              click to toggle source
                            
                            # File rexml-3.2.5/lib/rexml/parsers/pullparser.rb, line 45 def add_listener( listener ) @listeners = [] unless @listeners @listeners << listener end
                              each() { |pull| ... }
                              click to toggle source
                            
                            # File rexml-3.2.5/lib/rexml/parsers/pullparser.rb, line 50 def each while has_next? yield self.pull end end
                              peek(depth=0)
                              click to toggle source
                            
                            # File rexml-3.2.5/lib/rexml/parsers/pullparser.rb, line 56 def peek depth=0 if @my_stack.length <= depth (depth - @my_stack.length + 1).times { e = PullEvent.new(@parser.pull) @my_stack.push(e) } end @my_stack[depth] end
                              pull()
                              click to toggle source
                            
                            # File rexml-3.2.5/lib/rexml/parsers/pullparser.rb, line 66 def pull return @my_stack.shift if @my_stack.length > 0 event = @parser.pull case event[0] when :entitydecl @entities[ event[1] ] = event[2] unless event[2] =~ /PUBLIC|SYSTEM/ when :text unnormalized = @parser.unnormalize( event[1], @entities ) event << unnormalized end PullEvent.new( event ) end
                              unshift(token)
                              click to toggle source
                            
                            # File rexml-3.2.5/lib/rexml/parsers/pullparser.rb, line 81 def unshift token @my_stack.unshift token end