docs: def _importFeatureXml(filelocation):
      """Reads a featureXml file.
  
      :param filelocation: #TODO: docstring
      :returns: {featureKey1: {attribute1:value1, attribute2:value2, ...}, ...}
  
      See also :func:`importPeptideFeatures`
      """
      with io.open(filelocation, 'r', encoding='utf-8') as openFile:
          readingFeature = False
          readingHull = False
          featureDict = dict()
  
          for i, line in enumerate(openFile):
              line = line.strip()
              if readingFeature == True:
                  if line.find('<convexhull') != -1:
                      readingHull = True
                      hullNr = line.split('<convexhull nr=\"')[1].split('\">')[0]
                      hullList = list()
                  elif readingHull == True:
                      if line.find('<pt') != -1:
                          x = float(line.split('x=\"')[1].split('\"')[0])
                          y = float(line.split('y=\"')[1].split('\"')[0])
                          # x = retentiontime, y = m/z
                          #retentionTimeList.append(x)
                          hullList.append([x,y])
                      elif line.find('</convexhull>') != -1:
                          featureDict[featureKey]['convexHullDict'][hullNr] = hullList
                          readingHull = False
  
                  elif line.find('<position dim=\"0\">') != -1:
                      featureDict[featureKey]['dim0'] = float(line.split('<position dim=\"0\">')[1].split('</position>')[0])
                  elif line.find('<position dim=\"1\">') != -1:
                      featureDict[featureKey]['dim1'] = float(line.split('<position dim=\"1\">')[1].split('</position>')[0])
                  elif line.find('<intensity>') != -1:
                      featureDict[featureKey]['intensity'] = float(line.split('<intensity>')[1].split('</intensity>')[0])
                  elif line.find('<overallquality>') != -1:
                      featureDict[featureKey]['overallquality'] = float(line.split('<overallquality>')[1].split('</overallquality>')[0])
                  elif line.find('<charge>') != -1:
                      featureDict[featureKey]['charge'] = int( line.split('<charge>')[1].split('</charge>')[0] )
  
                  elif line.find('<userParam') != -1:
                      if line.find('name=\"label\"') != -1:
                          featureDict[featureKey]['label'] = line.split('value=\"')[1].split('\"/>')[0]
                      elif line.find('name=\"score_fit\"') != -1:
                          featureDict[featureKey]['score_fit'] = float(line.split('value=\"')[1].split('\"/>')[0])
                      elif line.find('name=\"score_correlation\"') != -1:
                          featureDict[featureKey]['score_correlation'] = float(line.split('value=\"')[1].split('\"/>')[0])
                      elif line.find('name=\"FWHM\"') != -1:
                          featureDict[featureKey]['FWHM'] = float(line.split('value=\"')[1].split('\"/>')[0])
                      elif line.find('name=\"spectrum_index\"') != -1:
                          featureDict[featureKey]['spectrum_index'] = line.split('value=\"')[1].split('\"/>')[0]
                      elif line.find('name=\"spectrum_native_id\"') != -1:
                          featureDict[featureKey]['spectrum_native_id'] = line.split('value=\"')[1].split('\"/>')[0]
  
                  elif line.find('</feature>') != -1:
                      #mzList = list()
                      #for retentionTime,mz in featureDict[featureKey]['convexHullDict']['0']:
                      #    mzList.append(mz)
                      featureDict[featureKey]['rt'] = featureDict[featureKey]['dim0']#numpy.median(retentionTimeList)
                      featureDict[featureKey]['mz'] = featureDict[featureKey]['dim1']#numpy.median(mzList)
  
                      readingFeature == False
  
              if line.find('<feature id') != -1:
                  readingFeature = True
                  featureKey = line.split('<feature id=\"')[1].split('\">')[0]
                  featureDict[featureKey] = dict()
                  featureDict[featureKey]['convexHullDict'] = dict()
                  #retentionTimeList = list()
      return featureDict