Class REXML::Parsers::PullParser
In: rexml/parsers/pullparser.rb
Parent: Object

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.

Methods

add_listener   each   new   peek   pull   unshift  

Included Modules

XMLTokens

Public Class methods

[Source]

# File rexml/parsers/pullparser.rb, line 37
      def initialize stream
        @entities = {}
        @listeners = nil
        @parser = BaseParser.new( stream )
        @my_stack = []
      end

Public Instance methods

[Source]

# File rexml/parsers/pullparser.rb, line 44
      def add_listener( listener )
        @listeners = [] unless @listeners
        @listeners << listener
      end

[Source]

# File rexml/parsers/pullparser.rb, line 49
      def each
        while has_next?
          yield self.pull
        end
      end

[Source]

# File rexml/parsers/pullparser.rb, line 55
      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

[Source]

# File rexml/parsers/pullparser.rb, line 65
      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

[Source]

# File rexml/parsers/pullparser.rb, line 80
      def unshift token
        @my_stack.unshift token
      end

[Validate]

ruby-doc.org is a community service provided by James Britt and Happy Camper Studios, a Phoenix, Arizona, Ruby application development company.

Documentation content on ruby-doc.org is provided by remarkable members of the Ruby community.

For more information on the Ruby programming language, visit ruby-lang.org.

Want to help improve Ruby's API docs? See Ruby Documentation Guidelines.