Skip to content
This repository
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 61 lines (48 sloc) 0.916 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
require 'benchmark'
require 'rubygems'
require 'nokogiri'

class Parser < Nokogiri::XML::SAX::Document

  attr_reader :response

  def initialize
    reset
  end

  def reset
    @item = {}
    @response = { :items => [] }
  end

  def characters(string)
    @value << string.strip
  end

  def start_element(name, attrs = [])
    @value = nil
  end

  def end_element(name)
    case name
    when 'item'
      @response[:items] << @item
      @item = {}
    when 'key'
      @item[:key] = @value
    end
  end

end

data = <<-DATA
<items>
<item>
<key>value</key>
</item>
</items>
DATA

COUNT = 100

Benchmark.bmbm(25) do |bench|
  bench.report('parse') do
    parser = Parser.new
    Nokogiri::XML::SAX::Parser.new(parser).parse(data)
    parser.response
  end

  bench.report('push') do
    parser = Parser.new
    Nokogiri::XML::SAX::PushParser.new(parser).write(data, true)
    parser.response
  end
end
Something went wrong with that request. Please try again.