def read_xml(self, file_configuration):
xml_file_path = None<EOL>delete_xml_file = True<EOL>fc = file_configuration<EOL>reader = source_reader.source_reader_t(<EOL>self.__config,<EOL>None,<EOL>self.__decl_factory)<EOL>try:<EOL><INDENT>if fc.content_type == fc.CONTENT_TYPE.STANDARD_SOURCE_FILE:<EOL><INDENT>self.logger.info('<STR_LIT>', fc.data)<EOL>xml_file_path = reader.create_xml_file(fc.data)<EOL><DEDENT>elif fc.content_type ==file_configuration_t.CONTENT_TYPE.GCCXML_GENERATED_FILE:<EOL><INDENT>self.logger.info('<STR_LIT>', fc.data)<EOL>xml_file_path = fc.data<EOL>delete_xml_file = False<EOL><DEDENT>elif fc.content_type == fc.CONTENT_TYPE.CACHED_SOURCE_FILE:<EOL><INDENT>if not os.path.exists(fc.cached_source_file):<EOL><INDENT>dir_ = os.path.split(fc.cached_source_file)[<NUM_LIT:0>]<EOL>if dir_ and not os.path.exists(dir_):<EOL><INDENT>os.makedirs(dir_)<EOL><DEDENT>self.logger.info(<EOL>'<STR_LIT>',<EOL>fc.cached_source_file, fc.data)<EOL>xml_file_path = reader.create_xml_file(<EOL>fc.data,<EOL>fc.cached_source_file)<EOL><DEDENT>else:<EOL><INDENT>xml_file_path = fc.cached_source_file<EOL><DEDENT><DEDENT>else:<EOL><INDENT>xml_file_path = reader.create_xml_file_from_string(fc.data)<EOL><DEDENT>with open(xml_file_path, "<STR_LIT:r>") as xml_file:<EOL><INDENT>xml = xml_file.read()<EOL><DEDENT>utils.remove_file_no_raise(xml_file_path, self.__config)<EOL>self.__xml_generator_from_xml_file =reader.xml_generator_from_xml_file<EOL>return xml<EOL><DEDENT>finally:<EOL><INDENT>if xml_file_path and delete_xml_file:<EOL><INDENT>utils.remove_file_no_raise(xml_file_path, self.__config)<EOL><DEDENT><DEDENT>
parses C++ code, defined on the file_configurations and returns
        GCCXML generated file content