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.
Class Methods
::
lib/rexml/parsers/pullparser.rb
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rexml/parsers/pullparser.rb, line 38
def initialize stream
@entities = {}
@listeners = nil
@parser = BaseParser.new( stream )
@my_stack = []
end
No documentation available
Instance Methods
lib/rexml/parsers/pullparser.rb
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rexml/parsers/pullparser.rb, line 45
def add_listener( listener )
@listeners = [] unless @listeners
@listeners << listener
end
No documentation available
lib/rexml/parsers/pullparser.rb
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rexml/parsers/pullparser.rb, line 50
def each
while has_next?
yield self.pull
end
end
No documentation available
lib/rexml/parsers/pullparser.rb
View on GitHub
# File tmp/rubies/ruby-2.4.10/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
No documentation available
#
lib/rexml/parsers/pullparser.rb
View on GitHub
# File tmp/rubies/ruby-2.4.10/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
No documentation available
lib/rexml/parsers/pullparser.rb
View on GitHub
# File tmp/rubies/ruby-2.4.10/lib/rexml/parsers/pullparser.rb, line 81
def unshift token
@my_stack.unshift token
end
No documentation available