text: #!/usr/bin/env ruby -wW1
  
  $: << '.'
  $: << '../lib'
  
  if __FILE__ == $0
    while (i = ARGV.index('-I'))
      x,path = ARGV.slice!(i, 2)
      $: << path
    end
  end
  
  require 'optparse'
  require 'stringio'
  require 'multi_xml'
  
  begin
    require 'libxml'
  rescue Exception => e
  end
  begin
    require 'nokogiri'
  rescue Exception => e
  end
  begin
    require 'ox'
  rescue Exception => e
  end
  
  $verbose = 0
  $parsers = []
  $iter = 10
  
  opts = OptionParser.new
  opts.on("-v", "increase verbosity")                            { $verbose += 1 }
  opts.on("-p", "--parser [String]", String, "parser to test")   { |p| $parsers = [p] }
  opts.on("-i", "--iterations [Int]", Integer, "iterations")     { |i| $iter = i }
  opts.on("-h", "--help", "Show this display")                   { puts opts; Process.exit!(0) }
  files = opts.parse(ARGV)
  
  if $parsers.empty?
    $parsers << 'libxml' if defined?(::LibXML)
    $parsers << 'nokogiri' if defined?(::Nokogiri)
    $parsers << 'ox' if defined?(::Ox)
  end
  
  files.each do |filename|
    times = { }
    xml = File.read(filename)
    $parsers.each do |p|
      MultiXml.parser = p
      start = Time.now
      $iter.times do |i|
        io = StringIO.new(xml)
        MultiXml.parse(io)
      end
      dt = Time.now - start
      times[p] = Time.now - start
    end
    times.each do |p,t|
      puts "%8s took %0.3f seconds to parse %s %d times." % [p, t, filename, $iter]
    end
  end
  