    /*
     * call-seq:
     *  native_parse_io(data, encoding)
     *
     * Parse the document accessable via +io+
     */
    static VALUE native_parse_io(VALUE self, VALUE io, VALUE encoding)
    {
      xmlSAXHandlerPtr handler;
      Data_Get_Struct(self, xmlSAXHandler, handler);

      xmlCharEncoding enc = (xmlCharEncoding)NUM2INT(encoding);

      xmlParserCtxtPtr sax_ctx = xmlCreateIOParserCtxt(
          handler,
          (void *)self,
          (xmlInputReadCallback)io_read_callback,
          (xmlInputCloseCallback)io_close_callback,
          (void *)io,
          enc
      );
      xmlParseDocument(sax_ctx);
      xmlFreeParserCtxt(sax_ctx);
      return io;
    }