Load the actual result values from the XML file and the log files.
        This may take some time if many log files have to be opened and parsed.

def collect_data(self, correct_only):
        """
        Load the actual result values from the XML file and the log files.
        This may take some time if many log files have to be opened and parsed.
        """
        self.results = []

        def get_value_from_logfile(lines, identifier):
            """
            This method searches for values in lines of the content.
            It uses a tool-specific method to so.
            """
            return load_tool(self).get_value_from_output(lines, identifier)

        # Opening the ZIP archive with the logs for every run is too slow, we cache it.
        log_zip_cache = {}
        try:
            for xml_result, result_file in self._xml_results:
                self.results.append(RunResult.create_from_xml(
                    xml_result, get_value_from_logfile, self.columns,
                    correct_only, log_zip_cache, self.columns_relevant_for_diff, result_file))
        finally:
            for file in log_zip_cache.values():
                file.close()

        for column in self.columns:
            column_values = (run_result.values[run_result.columns.index(column)] for run_result in self.results)
            column.type, column.unit, column.source_unit, column.scale_factor = get_column_type(column, column_values)


        del self._xml_results