# File lib/xsd/xmlparser/xmlparser.rb, line 27
  def do_parse(string_or_readable)
    # XMLParser passes a String in utf-8.
    @charset = 'utf-8'
    @parser = Listener.new
    @parser.parse(string_or_readable) do |type, name, data|
      case type
      when XML::Parser::START_ELEM
        start_element(name, data)
      when XML::Parser::END_ELEM
        end_element(name)
      when XML::Parser::CDATA
        characters(data)
      else
        raise FormatDecodeError.new("Unexpected XML: #{ type }/#{ name }/#{ data }.")
      end
    end
  end