code: def _preprocess_scan_params(self, xml_params):
          
          params = {}
          for param in xml_params:
              params[param.tag] = param.text or ''
          # Set default values.
          for key in self.scanner_params:
              if key not in params:
                  params[key] = self.get_scanner_param_default(key)
                  if self.get_scanner_param_type(key) == 'selection':
                      params[key] = params[key].split('|')[0]
          # Validate values.
          for key in params:
              param_type = self.get_scanner_param_type(key)
              if not param_type:
                  continue
              if param_type in ['integer', 'boolean']:
                  try:
                      params[key] = int(params[key])
                  except ValueError:
                      raise OSPDError('Invalid %s value' % key, 'start_scan')
              if param_type == 'boolean':
                  if params[key] not in [0, 1]:
                      raise OSPDError('Invalid %s value' % key, 'start_scan')
              elif param_type == 'selection':
                  selection = self.get_scanner_param_default(key).split('|')
                  if params[key] not in selection:
                      raise OSPDError('Invalid %s value' % key, 'start_scan')
              if self.get_scanner_param_mandatory(key) and params[key] == '':
                      raise OSPDError('Mandatory %s value is missing' % key,
                                      'start_scan')
          return params
docs: Processes the scan parameters.