docs: def _parseMzml(self):
          """ #TODO: docstring """
          #TODO: this is already pretty nested, reduce that eg by using a function
          #   processRunNode
          for event, element, elementTag in self:
              if elementTag == 'mzML':
                  metadataNode = ETREE.Element(self.elementTag,
                                               self.element.attrib
                                               )
                  _, _, targetTag = next(self)
                  break
  
          while targetTag != 'mzML':
              if targetTag == 'run':
                  runNode = ETREE.Element('run', self.element.attrib)
                  next(self)
                  while self.event != 'end' or self.elementTag != 'run':
                      if self.elementTag == 'spectrumList':
                          #Add spectrumListNode
                          specListAttrib = {'defaultDataProcessingRef':
                                            self.element.attrib['defaultDataProcessingRef']
                                            }
                          specListNode = ETREE.Element('spectrumList', specListAttrib)
                          runNode.append(specListNode)
                          #Parse and yield spectrum xml elements
                          while self.event != 'end' or self.elementTag != 'spectrumList':
                              if self.event == 'end' and self.elementTag == 'spectrum':
                                  yield self.element
                                  clearParsedElements(self.element)
                              next(self)
                      elif self.elementTag == 'chromatogramList':
                          #Add chromatogramListNode
                          chromListAttrib = {'defaultDataProcessingRef':
                                             self.element.attrib['defaultDataProcessingRef']
                                             }
                          chromListNode = ETREE.Element('chromatogramList',
                                                        chromListAttrib
                                                        )
                          runNode.append(chromListNode)
                          #Parse and store chromatogram xml elements
                          while self.event != 'end' or self.elementTag != 'chromatogramList':
                              if self.event == 'end' and self.elementTag == 'chromatogram':
                                  self.chromatogramList.append(self.element)
                                  #Alternatively also the chromatogram xml
                                  #elements could be yielded:
                                  #   yield self.element
                                  #   clearParsedElements(self.element)
                              next(self)
                      else:
                          runNode.append(self.element)
                      next(self)
                  metadataNode.append(runNode)
                  break
              else:
                  while self.event != 'end' or self.elementTag != targetTag:
                      next(self)
                  metadataNode.append(self.element)
              _, _, targetTag = next(self)
          recClearTag(metadataNode)
          recRemoveTreeFormating(metadataNode)
          self.metadataNode = recCopyElement(metadataNode)
          self.openfile.close()